Chapter4 PDF
Chapter4 PDF
Chapter4 PDF
Funciones
Las funciones max y min nos darán respectivamente el valor mayor y menor de
una lista:
>>> max('¡Hola, mundo!')
'u'
>>> min('¡Hola, mundo!')
46 Capı́tulo 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.
>>> len('Hola, mundo')
11
>>>
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
La función random devuelve un número flotante aleatorio entre 0.0 y 1.0 (inclu-
yendo 0.0, pero no 1.0). Cada vez que se llama a random, se obtiene el número
siguiente de una larga serie. Para ver un ejemplo, ejecuta este bucle:
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.301927091705
0.513787075867
0.319470430881
0.285145917252
0.839069045123
0.322027080731
0.550722110248
0.366591677812
0.396981483964
0.838116437404
La función random es solamente una de las muchas que trabajan con números
aleatorios. La función randint toma los parámetros inferior y superior, y
devuelve un entero entre inferior y superior (incluyendo ambos extremos).
>>> random.randint(5, 10)
5
48 Capı́tulo 4. Funciones
>>> t = [1, 2, 3]
>>> random.choice(t)
2
>>> random.choice(t)
3
>>> grados = 45
>>> radianes = grados / 360.0 * 2 * math.pi
>>> math.sin(radianes)
0.707106781187
La expresión math.pi toma la variable pi del módulo math. El valor de esa va-
riable es una aproximación de π, con una precisión de unos 15 dı́gitos.
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 entra-
da.
Las cadenas en la sentencia print están encerradas entre comillas. Da igual utilizar
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.
50 Capı́tulo 4. Funciones
Para finalizar la función, debes introducir una lı́nea vacı́a (esto no es necesario en
un script).
La sintaxis para llamar a nuestra nueva función es la misma que usamos para las
funciones internas:
>>> 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()
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()
Ejercicio 4.2 Desplaza la última lı́nea de este programa hacia arriba, de modo que
la llamada a la función aparezca antes que las definiciones. Ejecuta el programa y
observa qué mensaje de error obtienes.
Todo esto parece bastante sencillo, hasta que uno recuerda que una función puede
llamar a otra. Cuando está en mitad de una función, el programa puede tener que
52 Capı́tulo 4. Funciones
ejecutar las sentencias de otra función. Pero cuando está ejecutando esa nueva
función, ¡tal vez haya que ejecutar todavı́a más funciones!
Afortunadamente, Python es capaz de llevar el seguimiento de dónde se encuentra
en cada momento, de modo que cada vez que completa la ejecución de una fun-
ción, el programa vuelve al punto donde lo dejó en la función que habı́a llamado
a esa. Cuando esto le lleva hasta el final del programa, simplemente termina.
¿Cuál es la moraleja de esta sórdida historia? Cuando leas un programa, no siem-
pre te convendrá hacerlo de arriba a abajo. A veces tiene más sentido seguir el
flujo de la ejecución.
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:
>>> muestra_dos_veces('Spam '*4)
Spam Spam Spam Spam
Spam Spam Spam Spam
>>> muestra_dos_veces(math.cos(math.pi))
-1.0
-1.0
4.10. Funciones productivas y funciones estériles 53
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:
>>> michael = 'Eric, la medio-abeja.'
>>> muestra_dos_veces(michael)
Eric, la medio-abeja.
Eric, la medio-abeja.
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).
>>> resultado = print_twice('Bing')
Bing
Bing
>>> print resultado
None
54 Capı́tulo 4. Funciones
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.
def sumados(a, b):
suma = a + b
return suma
x = sumados(3, 5)
print x
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.
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 algu-
nos 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.
¡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 opera-
ció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 pasa-
do como argumento.
sentencia import: Una sentencia que lee un archivo módulo y crea un objeto
módulo.
4.14. Ejercicios
Ejercicio 4.4 ¿Cuál es la utilidad de la palabra clave “def” en Python?
a) Es una jerga que significa “este código es realmente estupendo”
b) Indica el comienzo de una función
c) Indica que la siguiente sección de código indentado debe ser almacenada para
usarla más tarde
d) b y c son correctas ambas
e) Ninguna de las anteriores
def jane():
print "ABC"
jane()
4.14. Ejercicios 57
fred()
jane()