Chapter 4es
Chapter 4es
Chapter 4es
Funciones
>>> type(32)
<class 'int'>
45
46 CHAPTER 4. FUNCIONES
La función max nos dice cuál es el “carácter más grande” de la cadena (que resulta
ser la letra “u”), mientras que la función min nos muestra el carácter más pequeño
(que en ese caso es un espacio).
Otra función interna muy común es len, que nos dice cuántos elementos hay en
su argumento. Si el argumento de len es una cadena, nos devuelve el número de
caracteres que hay en la cadena.
>>> int('32')
32
>>> int('Hola')
ValueError: invalid literal for int() with base 10: 'Hola'
int puede convertir valores en punto flotante a enteros, pero no los redondea;
simplemente corta y descarta la parte decimal:
>>> int(3.99999)
3
>>> int(-2.3)
-2
>>> float(32)
32.0
>>> float('3.14159')
3.14159
>>> str(32)
'32'
>>> str(3.14159)
'3.14159'
4.4. FUNCIONES MATEMÁTICAS 47
>>> print(math)
<module 'math' (built-in)>
>>> grados = 45
>>> radianes = grados / 360.0 * 2 * math.pi
>>> math.sin(radianes)
0.7071067811865476
La expresión math.pi toma la variable pi del módulo math. El valor de esa variable
es una aproximación de π, con una precisión de unos 15 dígitos.
Si sabes de trigonometría, puedes comprobar el resultado anterior, comparándolo
con la raíz cuadrada de dos dividida por dos:
import random
for i in range(10):
x = random.random()
print(x)
Este programa produce la siguiente lista de 10 números aleatorios entre 0.0 y hasta
(pero no incluyendo) 1.0.
0.11132867921152356
0.5950949227890241
0.04820265884996877
0.841003109276478
0.997914947094958
0.04842330803368111
0.7416295948208405
0.510535245390327
0.27447040171978143
0.028511805472785867
>>> t = [1, 2, 3]
>>> random.choice(t)
2
>>> random.choice(t)
3
Hasta ahora, sólo hemos estado usando las funciones que vienen incorporadas en
Python, pero es posible añadir también funciones nuevas. Una definición de fun-
ción especifica el nombre de una función nueva y la secuencia de sentencias que se
ejecutan cuando esa función es llamada. Una vez definida una función, se puede
reutilizar una y otra vez a lo largo de todo el programa.
He aquí un ejemplo:
def muestra_estribillo():
print('Soy un leñador, qué alegría.')
print('Duermo toda la noche y trabajo todo el día.')
def es una palabra clave que indica que se trata de una definición de función. El
nombre de la función es muestra_estribillo. Las reglas para los nombres de las
funciones son los mismos que para las variables: se pueden usar letras, números y
algunos signos de puntuación, pero el primer carácter no puede ser un número. No
se puede usar una palabra clave como nombre de una función, y se debería evitar
también tener una variable y una función con el mismo nombre.
Los paréntesis vacíos después del nombre indican que esta función no toma ningún
argumento. Más tarde construiremos funciones que reciban argumentos de entrada.
La primera línea de la definición de la función es llamada la cabecera; el resto se
llama el cuerpo. La cabecera debe terminar con dos-puntos (:), y el cuerpo debe ir
indentado. Por convención, el indentado es siempre de cuatro espacios. El cuerpo
puede contener cualquier número de sentencias.
Las cadenas en la sentencia print están encerradas entre comillas. Da igual uti-
lizar comillas simples que dobles; la mayoría de la gente prefiere comillas simples,
excepto en aquellos casos en los que una comilla simple (que también se usa como
apostrofe) aparece en medio de la cadena.
Si escribes una definición de función en modo interactivo, el intérprete mostrará
puntos suspensivos (. . . ) para informarte de que la definición no está completa:
50 CHAPTER 4. FUNCIONES
Para finalizar la función, debes introducir una línea vacía (esto no es necesario en
un script).
Al definir una función se crea una variable con el mismo nombre.
>>> print(muestra_estribillo)
<function muestra_estribillo at 0xb7e99e9c>
>>> print(type(muestra_estribillo))
<type 'function'>
>>> muestra_estribillo()
Soy un leñador, qué alegría.
Duermo toda la noche y trabajo todo el día.
Una vez que se ha definido una función, puede usarse dentro de otra. Por ejem-
plo, para repetir el estribillo anterior, podríamos escribir una función llamada
repite_estribillo:
def repite_estribillo():
muestra_estribillo()
muestra_estribillo()
>>> repite_estribillo()
Soy un leñador, qué alegría.
Duermo toda la noche y trabajo todo el día.
Soy un leñador, qué alegría.
Duermo toda la noche y trabajo todo el día.
def muestra_estribillo():
print('Soy un leñador, que alegría.')
print('Duermo toda la noche y trabajo todo el día.')
def repite_estribillo():
muestra_estribillo()
muestra_estribillo()
repite_estribillo()
# Code: http://www.py4e.com/code3/lyrics.py
def muestra_dos_veces(bruce):
print(bruce)
print(bruce)
>>> muestra_dos_veces('Spam')
Spam
Spam
>>> muestra_dos_veces(17)
17
17
>>> muestra_dos_veces(math.pi)
3.14159265359
3.14159265359
Las mismas reglas de composición que se aplican a las funciones internas, también
se aplican a las funciones definidas por el usuario, de modo que podemos usar
cualquier tipo de expresión como argumento para muestra_dos_veces:
El argumento es evaluado antes de que la función sea llamada, así que en los
ejemplos, la expresión Spam *4 y math.cos(math.pi) son evaluadas sólo una vez.
También se puede usar una variable como argumento:
x = math.cos(radians)
aurea = (math.sqrt(5) + 1) / 2
>>> math.sqrt(5)
2.23606797749979
math.sqrt(5)
Este script calcula la raíz cuadrada de 5, pero dado que no almacena el resultado
en una variable ni lo muestra, no resulta en realidad muy útil.
Las funciones estériles pueden mostrar algo en la pantalla o tener cualquier otro
efecto, pero no devuelven un valor. Si intentas asignar el resultado a una variable,
obtendrás un valor especial llamado None (nada).
El valor None no es el mismo que la cadena “None”. Es un valor especial que tiene
su propio tipo:
>>> print(type(None))
<class 'NoneType'>
Para devolver un resultado desde una función, usamos la sentencia return dentro
de ella. Por ejemplo, podemos crear una función muy simple llamada sumados,
que suma dos números y devuelve el resultado.
x = sumados(3, 5)
print(x)
# Code: http://www.py4e.com/code3/addtwo.py
Cuando se ejecuta este script, la sentencia print mostrará “8”, ya que la función
sumados ha sido llamada con 3 y 5 como argumentos. Dentro de la función, los
parámetros a y b equivaldrán a 3 y a 5 respectivamente. La función calculó la
suma de ambos número y la guardó en una variable local a la función llamada
suma. Después usó la sentencia return para enviar el valor calculado de vuelta al
código de llamada como resultado de la función, que fue asignado a la variable x
y mostrado en pantalla.
Throughout the rest of the book, often we will use a function definition to explain
a concept. Part of the skill of creating and using functions is to have a function
properly capture an idea such as “find the smallest value in a list of values”. Later
we will show you code that finds the smallest in a list of values and we will present
it to you as a function named min which takes a list of values as its argument and
returns the smallest value in the list.
4.12. DEPURACIÓN 55
4.12 Depuración
Si estás usando un editor de texto para escribir tus propios scripts, puede que tengas
problemas con los espacios y tabulaciones. El mejor modo de evitar esos problemas
es usar espacios exclusivamente (no tabulaciones). La mayoría de los editores de
texto que reconocen Python lo hacen así por defecto, aunque hay algunos que no.
Las tabulaciones y los espacios normalmente son invisibles, lo cual hace que sea
difícil depurar los errores que se pueden producir, así que mejor busca un editor
que gestione el indentado por ti.
Tampoco te olvides de guardar tu programa antes de hacerlo funcionar. Algunos
entornos de desarrollo lo hacen automáticamente, pero otros no. En ese caso, el
programa que estás viendo en el editor de texto puede no ser el mismo que estás
ejecutando en realidad.
¡La depuración puede llevar mucho tiempo si estás haciendo funcionar el mismo
programa con errores una y otra vez!
Asegúrate que el código que estás examinando es el mismo que estás ejecutando. Si
no estás seguro, pon algo como print("hola") al principio del programa y hazlo
funcionar de nuevo. Si no ves hola en la pantalla, ¡es que no estás ejecutando el
programa correcto!
4.13 Glosario
algoritmo Un proceso general para resolver una categoría de problemas.
composición Uso de una expresión o sentencia como parte de otra más larga,
definición de función Una sentencia que crea una función nueva, especificando
su nombre, parámetros, y las sentencias que ejecuta.
función Una secuencia de sentencias con un nombre que realizan alguna operación
útil. Las funciones pueden tomar argumentos o no, y pueden producir un
resultado o no.
función estéril (void function) Una función que no devuelve ningún valor.
llamada a función Una sentencia que ejecuta una función. Consiste en el nom-
bre de la función seguido por una lista de argumentos.
notación punto La sintaxis para llamar a una función de otro módulo, especifi-
cando el nombre del módulo seguido por un punto y el nombre de la función.
objeto módulo Un valor creado por una sentencia import, que proporciona ac-
ceso a los datos y código definidos en un módulo.
parámetro Un nombre usado dentro de una función para referirse al valor pasado
como argumento.
sentencia import Una sentencia que lee un archivo módulo y crea un objeto
módulo.
4.14 Exercises
def fred():
print("Zap")
def jane():
print("ABC")
jane()
fred()
jane()
Introduzca Horas: 45
Introduzca Tarifa: 10
Salario: 475.0
Puntuación Calificación
> 0.9 Sobresaliente
> 0.8 Notable
> 0.7 Bien
> 0.6 Suficiente
<= 0.6 Insuficiente
Ejecuta el programa repetidamente para probar con varios valores de entrada difer-
entes.