Beruflich Dokumente
Kultur Dokumente
Funciones en Python
• Concepto de función
• Definición y utilización de funciones en Python
• Documentación de funciones
• Argumentos de una función
• Return
• *args y **kwargs
• Generadores
5. Funciones
Definición y utilización
Para definir una función en Python lo haremos:
nombre_funcion(parametro1, parametro2, … )
Documentación de funciones
Es siempre una muy buena idea documentar la función
def nombre_funcion(parametro1, parametro2, … ):
"""Aquí digo lo que hace la función, aunque me
parezca muy obvio"""
<código>
<código>
<código>
return valor
help(nombre_funcion)
Parámetros:
==========
nombre : str
Nombre de la persona
saludo : str
Saludo a utilizar
"""
print("{0} {1}, bienvenido a este curso de Python".format(saludo, nombre))
import datetime
def get_edad(nombre, ano_nacimiento):
"""Función que calcula tu edad"""
print("Hola {0}".format(nombre))
edad = datetime.date.today().year - ano_nacimiento
print("Tienes {0} años".format(edad))
>>> saluda("Ana")
Hola, Ana es un placer tenerle aquí.
Return
Sale de la función devolviendo el valor indicado
Si no especificamos return …, la función sigue retornando un valor!
def presentacion1():
"""Función educada"""
print("Hola soy una función")
def presentacion2():
"""Función educada"""
return "Hola soy una función"
5. Funciones
Return
Una función puede tener múltiples return
Return
La instrucción return siempre fuerza la salida de la función
def saluda_alumno(alumno):
"""Función que te saluda si eres un alumno"""
alumnos = ("Vicente", "Sara", "Daniel")
if alumno not in alumnos:
return
else:
print("Hola " + alumno + " bienvenido al curso")
>>> saluda_alumno("Vicente")
>>> saluda_alumno("Sara")
>>> saluda_alumno("Joaquin")
5. Funciones
*args y **kwargs
Si una función toma como argumento *args (lo importante es el asterisco)
significa que acepta cualquier número de argumentos "sin nombre" (non-
keyworded arguments)
def media(*args):
"""Función que calcula la media"""
acumm = 0
n = 0
for valor in args:
acumm += valor Dentro de la función, args
n += 1 se comporta como una tupla.
return acumm / n
>>> media(4, 4, 6, 7, 5, 7, 8, 9)
6.25
>>> media(15, 14.5, 14, 16)
14.875 ¿Podrías reducir las líneas
de código del ejemplo?
5. Funciones
*args y **kwargs
Si una función toma como argumento **kwargs (lo importante son los dos
asteriscos) significa que acepta cualquier número de argumentos con nombre
"keyworded arguments".
kwargs dentro de la función será un diccionario (podemos utilizar sus métodos
específicos):
claves nombres de los argumentos que toma la función (texto)
valores valores de cada argumento (cualquier tipo)
*args y **kwargs
Ejemplo de utilidad de *args y **kwargs
Vamos a crear una función que dibuje una línea con el siguiente estilo por defecto:
Argumento valor
linewidth 2
color 'black'
Pero como buena función, nos
marker 'o'
permitirá cambiar cualquier
markerfacecolor '0.7' (70% gris) elemento de este estilo
5. Funciones
*args y **kwargs
Observa estas dos funciones:
5. Funciones
*args y **kwargs
x = [2, 3, 4, 5, 6, 7, 8]
y = [5, 6, 7, 6, 5, 4, 2]
[1] draw(x, y)
[2] draw2(x, y)
[3] draw2(x, y, color="blue", markerfacecolor="orange", linewidth=1)
[4] draw2(x, y, markerfacecolor="green", marker="s", linestyle="--", linewidth=0.5, markersize=4)
[1] Genera línea con estilo [2] Genera línea con [3] Cambiamos los [4] Cambiamos cualquier
por defecto de plot() nuestro estilo por defecto parámetros, clor, parámetro aceptado por
markerfacecolor, y plot, incluso sin estar
linewith a nuestro estilo definido en nuestro estilo
por defecto por defecto.
5. Funciones
Generadores
Si una función utiliza yield en vez de return, define un objeto generador
Al llamar a esta función, se crea el objeto generador (su código no se ejecuta)
Un objeto generador es iterable y podemos utilizar la función next() en él
En cada iteración del generador, cuando se encuentra un yield se "congela" el
estado de la función hasta la siguiente iteración
Solo podemos iterar el generador una sola vez
Llamar a next() cuando ha terminado el iterador genera un error StopIteration
5. Funciones
Expresiones generadoras
generador = (expression for item in iterable [if condition])
for c in comments:
print(c)