Una función es un bloque de código con nombre que puedes ejecutar cada vez que lo necesites. En lugar de escribir el mismo código una y otra vez, lo encierras en una función y simplemente la llamas.
La estructura básica es siempre la misma:
estructura.py
PYTHON
1def nombre_funcion(parametro1, parametro2):
2# código que ejecuta la función
3# ...
def — palabra clave que le dice a Python "esto es una función".
nombre_funcion — el nombre que tú eliges para llamarla después.
parametro1, parametro2 — datos que le puedes pasar (pueden ser 0 o más).
El cuerpo va indentado (4 espacios o un tab).
Funciones sin retorno
Una función sin retorno realiza una acción pero no devuelve ningún valor. Su trabajo es hacer algo: mostrar texto, guardar un archivo, enviar un mensaje… y listo.
El ejemplo más conocido es print(). Cuando escribes print("Hola"), Python muestra el texto en pantalla — eso es su "acción" — pero print() en sí no te entrega ningún valor de vuelta. Si intentas capturar su resultado, obtendrás None:
print_none.py
PYTHON
1resultado = print("Hola mundo")
2print(resultado) # None ← print no devuelve nada
Cuando tú creas una función sin escribir return, funciona exactamente igual:
sin_retorno.py
PYTHON
1def mostrar_bienvenida(nombre):
2print("---------------------------")
3print(f" Bienvenido, {nombre}!")
4print("---------------------------")
5
6# Solo llamas la función — no hay valor de retorno
7mostrar_bienvenida("Benjamín")
8mostrar_bienvenida("Ana")
9mostrar_bienvenida("Luis")
Salida:
salida
TEXT
1---------------------------
2 Bienvenido, Benjamín!
3---------------------------
4---------------------------
5 Bienvenido, Ana!
6---------------------------
7---------------------------
8 Bienvenido, Luis!
9---------------------------
Nota cómo llamamos la función tres veces sin repetir el código del recuadro. Eso es el principio DRY (Don't Repeat Yourself) en acción.
Funciones con retorno
Una función con retorno calcula o produce algo y te lo entrega de vueltausando la palabra clave return. Puedes guardar ese valor en una variable o usarlo directamente.
Un ejemplo que ya conoces es input(). Esta función muestra un mensaje en pantalla y espera a que el usuario escriba algo. Cuando el usuario presiona Enter,input() te devuelve lo que escribió como texto (str):
input_ejemplo.py
PYTHON
1nombre = input("¿Cuál es tu nombre? ")
2# Aquí 'nombre' guarda el texto que el usuario escribió
3print(f"Hola, {nombre}!")
Cuando tú creas una función con return, haces lo mismo:
con_retorno.py
PYTHON
1def sumar(a, b):
2 resultado = a + b
3return resultado # ← entregamos el valor
4
5# Capturamos lo que devuelve la función
6total = sumar(10, 5)
7print(total) # 15
8
9# También podemos usarlo directamente
10print(sumar(3, 7)) # 10
11print(sumar(100, 200)) # 300
Un ejemplo más completo que combina lógica dentro de la función:
descuentos.py
PYTHON
1def calcular_descuento(precio, porcentaje):
2 descuento = precio * (porcentaje / 100)
3 precio_final = precio - descuento
4return precio_final
5
6zapatos = calcular_descuento(150, 20) # 20% de descuento
7camisa = calcular_descuento(80, 10) # 10% de descuento
Parámetros: valores por defecto y argumentos con nombre
Puedes darle a un parámetro un valor por defecto. Si el llamador no lo pasa, se usa ese valor automáticamente.
parametros.py
PYTHON
1def saludar(nombre, mensaje="Bienvenido"):
2return f"¡Hola {nombre}! {mensaje}"
3
4print(saludar("Benjamín")) # usa el mensaje por defecto
5print(saludar("Juan", "Gusto en verte")) # sobreescribe el mensaje
6print(saludar(mensaje="¿Cómo estás?", nombre="Ana")) # argumentos con nombre (puedes cambiar el orden)
Funciones Lambda (Anónimas)
Para lógica muy corta que cabe en una línea, Python tiene las funciones lambda. Son útiles cuando necesitas una función rápida sin darle nombre formal.
lambda.py
PYTHON
1# Función normal
2def cuadrado(x):
3return x * x
4
5# La misma función como lambda
6cuadrado = lambda x: x * x
7
8print(cuadrado(5)) # 25
9print(cuadrado(9)) # 81
10
11# Lambda con dos parámetros
12area = lambda base, altura: (base * altura) / 2
13print(area(10, 4)) # 20.0
Ejemplo completo: Calculadora con menú
Aquí vemos cómo dividir un programa real en mini funciones, cada una con una sola responsabilidad. La función pedir_opcion() usa un while + try/except para repetir la pregunta si el usuario escribe algo incorrecto.
Paso 1 — Las operaciones (funciones con retorno):
calculadora.py — operaciones
PYTHON
1def sumar(a, b):
2return a + b
3
4def restar(a, b):
5return a - b
6
7def multiplicar(a, b):
8return a * b
9
10def dividir(a, b):
11if b == 0:
12return"Error: no se puede dividir entre cero"
13return a / b
Paso 2 — Función para mostrar el menú (sin retorno):
calculadora.py — menú
PYTHON
1def mostrar_menu():
2print("\n=== CALCULADORA ===")
3print("1. Sumar")
4print("2. Restar")
5print("3. Multiplicar")
6print("4. Dividir")
7print("0. Salir")
Paso 3 — Función para pedir un número (con retorno + while + try/except):
Esta función es clave: usa un while True para seguir preguntando hasta que el usuario escriba un número válido. Si escribe texto o lo deja vacío, el except atrapa el error y vuelve a intentar.
calculadora.py — pedir número
PYTHON
1def pedir_numero(mensaje):
2whileTrue:
3try:
4 numero = float(input(mensaje))
5return numero
6except ValueError:
7print(" ⚠ Eso no es un número. Intenta de nuevo.")
Paso 4 — Función para pedir la opción del menú (con retorno + while + try/except):
Igual que pedir_numero(), pero valida que la opción esté entre 0 y 4. Si el usuario escribe "abc" o "9", le avisa y repite.
calculadora.py — pedir opción
PYTHON
1def pedir_opcion():
2whileTrue:
3try:
4 opcion = int(input("\nElige una opción (0-4): "))
5if opcion notin [0, 1, 2, 3, 4]:
6print(" ⚠ Opción inválida. Elige entre 0 y 4.")
7else:
8return opcion
9except ValueError:
10print(" ⚠ Debes escribir un número, no letras.")
Paso 5 — El programa principal que une todo:
calculadora.py — main
PYTHON
1def main():
2whileTrue:
3 mostrar_menu()
4 opcion = pedir_opcion()
5
6if opcion == 0:
7print("¡Hasta luego!")
8break
9
10 a = pedir_numero("Primer número: ")
11 b = pedir_numero("Segundo número: ")
12
13if opcion == 1:
14 resultado = sumar(a, b)
15elif opcion == 2:
16 resultado = restar(a, b)
17elif opcion == 3:
18 resultado = multiplicar(a, b)
19elif opcion == 4:
20 resultado = dividir(a, b)
21
22print(f"\n Resultado: {resultado}")
23
24main()
Código completo junto:
calculadora.py — completo
PYTHON
1# --- Operaciones ---
2def sumar(a, b):
3return a + b
4
5def restar(a, b):
6return a - b
7
8def multiplicar(a, b):
9return a * b
10
11def dividir(a, b):
12if b == 0:
13return"Error: no se puede dividir entre cero"
14return a / b
15
16# --- Interfaz ---
17def mostrar_menu():
18print("\n=== CALCULADORA ===")
19print("1. Sumar")
20print("2. Restar")
21print("3. Multiplicar")
22print("4. Dividir")
23print("0. Salir")
24
25def pedir_numero(mensaje):
26whileTrue:
27try:
28 numero = float(input(mensaje))
29return numero
30except ValueError:
31print(" ⚠ Eso no es un número. Intenta de nuevo.")
32
33def pedir_opcion():
34whileTrue:
35try:
36 opcion = int(input("\nElige una opción (0-4): "))
37if opcion notin [0, 1, 2, 3, 4]:
38print(" ⚠ Opción inválida. Elige entre 0 y 4.")
39else:
40return opcion
41except ValueError:
42print(" ⚠ Debes escribir un número, no letras.")
43
44# --- Programa principal ---
45def main():
46whileTrue:
47 mostrar_menu()
48 opcion = pedir_opcion()
49
50if opcion == 0:
51print("¡Hasta luego!")
52break
53
54 a = pedir_numero("Primer número: ")
55 b = pedir_numero("Segundo número: ")
56
57if opcion == 1:
58 resultado = sumar(a, b)
59elif opcion == 2:
60 resultado = restar(a, b)
61elif opcion == 3:
62 resultado = multiplicar(a, b)
63elif opcion == 4:
64 resultado = dividir(a, b)
65
66print(f"\n Resultado: {resultado}")
67
68main()
Ejemplo de ejecución con errores del usuario:
ejecución
TEXT
1=== CALCULADORA ===
21. Sumar
32. Restar
43. Multiplicar
54. Dividir
60. Salir
7
8Elige una opción (0-4): abc
9 ⚠ Debes escribir un número, no letras.
10
11Elige una opción (0-4): 9
12 ⚠ Opción inválida. Elige entre 0 y 4.
13
14Elige una opción (0-4): 1
15Primer número: hola
16 ⚠ Eso no es un número. Intenta de nuevo.
17Primer número: 15
18Segundo número: 7
19
20 Resultado: 22.0
Ejercicios prácticos
Ejercicio 1 — Multiplicar dos números
Crea una función multiplicar(a, b) que reciba dos números y retorne su producto.
👁️ Ver solución
solucion_1.py
PYTHON
1def multiplicar(a, b):
2return a * b
3
4print(multiplicar(5, 4)) # 20
5print(multiplicar(3, 7)) # 21
Ejercicio 2 — Calcular el área de un rectángulo
Crea una función area_rectangulo(base, altura) que retorne el área.
👁️ Ver solución
solucion_2.py
PYTHON
1def area_rectangulo(base, altura):
2return base * altura
3
4print(area_rectangulo(5, 3)) # 15
5print(area_rectangulo(10, 4)) # 40
Ejercicio 3 — Saludar con mayúsculas
Crea una función saludar(nombre) que imprima el nombre en mayúsculas dentro de un saludo. La función NO debe retornar nada.
👁️ Ver solución
solucion_3.py
PYTHON
1def saludar(nombre):
2print(f"¡HOLA, {nombre.upper()}!")
3
4saludar("benjamín") # ¡HOLA, BENJAMÍN!
5saludar("ana") # ¡HOLA, ANA!
Ejercicio 4 — ¿Es par o impar?
Crea una función es_par(numero) que retorne True si el número es par y False si es impar.
👁️ Ver solución
solucion_4.py
PYTHON
1def es_par(numero):
2return numero % 2 == 0
3
4print(es_par(4)) # True
5print(es_par(7)) # False
6print(es_par(10)) # True
Ejercicio 5 — Mayor de dos números
Crea una función mayor(a, b) que retorne el número más grande de los dos.
👁️ Ver solución
solucion_5.py
PYTHON
1def mayor(a, b):
2if a > b:
3return a
4return b
5
6print(mayor(10, 5)) # 10
7print(mayor(3, 8)) # 8
8print(mayor(7, 7)) # 7
Ejercicio 6 — Contar letras
Crea una función contar_letras(texto) que retorne cuántos caracteres tiene el texto (sin contar espacios).
👁️ Ver solución
solucion_6.py
PYTHON
1def contar_letras(texto):
2returnlen(texto.replace(" ", ""))
3
4print(contar_letras("hola mundo")) # 9
5print(contar_letras("Python")) # 6
Ejercicio 7 — Precio con IGV
Crea una función precio_con_igv(precio) que retorne el precio con 18% de IGV incluido. El parámetro igv debe tener valor por defecto de 0.18.
Crea una función calcular(a, b, operacion) que reciba dos números y una operación ("sumar", "restar", "multiplicar", "dividir") y retorne el resultado. Si la operación no existe, retorna "Operación no válida".
👁️ Ver solución
solucion_10.py
PYTHON
1def calcular(a, b, operacion):
2if operacion == "sumar":
3return a + b
4elif operacion == "restar":
5return a - b
6elif operacion == "multiplicar":
7return a * b
8elif operacion == "dividir":
9if b == 0:
10return"No se puede dividir entre cero"
11return a / b
12else:
13return"Operación no válida"
14
15print(calcular(10, 5, "sumar")) # 15
16print(calcular(10, 5, "restar")) # 5
17print(calcular(10, 5, "multiplicar")) # 50
18print(calcular(10, 5, "dividir")) # 2.0
19print(calcular(10, 0, "dividir")) # No se puede dividir entre cero
20print(calcular(10, 5, "potencia")) # Operación no válida
Prueba de Funciones
QuizQuiz: Funciones Python
Son 5 preguntas de opción múltiple sobre esta lección. ¡Evalúa tus conocimientos!
Dato curioso: Primera versión pública en 1991; Guido van Rossum. Wikipedia
Donaciones
Apoyá cafeycodigo con un café en Ko-fi. Colaboradores: insignia, muro y zona exclusiva.