Funciones
En resumen: Una función es un bloque de código con nombre que hace un solo trabajo: la escribes una vez y la llamas por su nombre tantas veces como necesites.
Problema
Un cambio, tres lugares
Estás escribiendo el programa de la caja de una tienda pequeña. Cada recibo empieza con el nombre de la tienda y su teléfono. Por eso has copiado esas dos líneas en todos los lugares donde se imprime un recibo.
La tienda cambia de teléfono. Lo corriges en dos lugares y se te pasa el tercero:
print("Tienda del barrio")print("tel. 02 123 4567")print("Pan 1,20 €")
print("Tienda del barrio")print("tel. 02 123 4567")print("Leche 2,10 €")
print("Tienda del barrio")print("tel. 02 765 4321")print("Café 3,50 €")Tienda del barriotel. 02 123 4567Pan 1,20 €Tienda del barriotel. 02 123 4567Leche 2,10 €Tienda del barriotel. 02 765 4321Café 3,50 €El tercer cliente recibe un recibo con el número viejo. Cuantas más copias hay, más fácil es que se te pase una.
La idea
Escríbelo una vez, llámalo por su nombre
Pon la parte que se repite en un solo lugar y dale un nombre. Eso es una función: un bloque de código con nombre que hace un solo trabajo.
Escribes la función una vez. Después, donde la necesites, escribes solo su nombre con paréntesis: print_header(). Esto se llama llamar a la función.
Si la tienda vuelve a cambiar de teléfono, corriges una línea en la función, y todos los recibos quedan bien.
Míralo
Qué pasa en una llamada
El programa avanza línea por línea. Cuando llega a una llamada, entra en la función, ejecuta su cuerpo y vuelve justo después de la llamada. Sigue la bolita: es el punto al que ha llegado el programa.
def print_header(): print("Tienda del barrio") print("tel. 02 123 4567")
print_header()print("Pan 1,20 €")print_header()print("Leche 2,10 €")Paso a paso, en palabras
- def solo guarda la función. La primera línea que hace algo es print_header().
- Una llamada: la ejecución entra en la función.
- La función imprime la parte de arriba del recibo.
- Las líneas con sangría se acabaron, así que la función ha terminado: la ejecución vuelve justo después de la llamada.
- El programa sigue: imprime el pan.
- Una segunda llamada: el mismo código, sin escribirlo otra vez.
- La parte de arriba se imprime otra vez.
- De vuelta en el programa, a la línea siguiente.
La segunda vez no escribes otra vez la parte de arriba. Llamas a la misma función, y esta imprime las mismas dos líneas.
La idea
Cómo se escribe una función
Aquí está el programa entero, para que veas dónde va la función:
def print_header(): print("Tienda del barrio") print("tel. 02 123 4567")
print_header()print("Pan 1,20 €")Tienda del barriotel. 02 123 4567Pan 1,20 €def(de define, «definir») dice que sigue una función. La línea solo la guarda con un nombre; no la ejecuta.- El nombre dice qué hace la función. Por eso es un verbo:
print_header,print_footer. En Python los nombres van en minúsculas, y las palabras se unen con guion bajo. - Los paréntesis vacíos significan que la función no recibe nada de fuera. Los llenaremos en la próxima lección.
- El cuerpo son las líneas con sangría de 4 espacios después de los dos puntos. La primera línea sin sangría ya no forma parte de la función.
- La función va encima de las líneas que la llaman. Python lee el archivo de arriba abajo y tiene que haberla visto ya.
- Alrededor de la función hay dos líneas en blanco. El programa funciona sin ellas, pero así se escribe Python (la guía de estilo PEP 8).
Pruébalo
¿En qué orden?
¿Qué imprimirá el programa?
def print_thanks(): print("¡Gracias!")
print("Pedido n.º 1024")print_thanks()print("Pedido n.º 1025")print_thanks()Una función se ejecuta cuando se la llama, no donde está escrita. Aquí se llama dos veces, así que «¡Gracias!» se imprime dos veces, cada vez después de su pedido.
Pruébalo
¿Qué falta?
Esta función imprime la parte de abajo del recibo. ¿Qué va en el hueco?
print_footer():
print("Esperamos verte pronto de nuevo.")def: así empieza toda función.Pruébalo
Encuentra el error
Elige la línea con el error.
print_thanks(). Sin ellos solo mencionas la función, y no se ejecuta. No hay ningún error, por eso este descuido cuesta de ver: fíjate en la salida.Ejercicio
El recibo y el triángulo
Resuelve estas tareas en tu editor. Cada una tiene una salida de ejemplo para comparar con la tuya.
1. Recibo. Escribe tres funciones:
print_line()imprime una línea de 20 guiones con un bucle;print_header()imprime el nombre de la tienda, el teléfono y la línea;print_footer()imprime la línea y «¡Gracias!».
Debajo de ellas, imprime dos recibos: la parte de arriba, una línea con una compra y la parte de abajo.
Tienda del barriotel. 02 123 4567--------------------Pan 1,20 €--------------------¡Gracias!Tienda del barriotel. 02 123 4567--------------------Leche 2,10 €--------------------¡Gracias!2. Triángulo. Escribe una función print_triangle() que, con bucles anidados, imprima un triángulo de asteriscos de 4 filas de alto:
* *** ************En la próxima lección la altura será un parámetro: una sola función para un triángulo de la altura que quieras.
Test
Ponte a prueba
Lecciones relacionadas
Sección «Lecciones relacionadas»- Se basa en: Tu primer programa · Variables y tipos · Bucles
- Continúa en: Parámetros y return · Valores por defecto · Recursión · Clases y objetos
- Ejercicios sobre el tema: Funciones