Aprende leyendo en orden

Definir funciones con def — argumentos, valores de retorno, argumentos por defecto y por palabra clave

Aprende a definir funciones con def y return, y a usar argumentos por defecto y por palabra clave en Python.

Cuando la misma lógica necesita ejecutarse muchas veces, quieres una forma de darle a esa lógica un nombre y llamarla desde donde la necesites. Ese mecanismo es una función, definida con la palabra clave def.

Con funciones, la lógica compartida vive en un solo lugar y cada sitio de llamada es una sola línea. Todo lo que has usado hasta ahora — print() / len() / int() / sum() — también es una función.

Lo básico de def y return

Define una función con def nombre_funcion(argumentos): e indenta el cuerpo. Devuelve un valor al que llamó con return valor. Una función sin return efectivamente devuelve None.

Funciones, argumentos y valores de retorno
argumento(entrada)función(cuerpo)valor de retorno(salida)pasardevolver

El argumento es lo que el llamante entrega a la función, y el valor de retorno es lo que la función envía de vuelta vía return. Como la misma función puede llamarse con argumentos distintos para resultados distintos, una sola definición puede alimentar muchos sitios de llamada.

Definir y llamar a una función
definirejecutardef greet(name): return ...greet("Ana")ejecutar el cuerpovalor de retornoregresaname: Anareturn ...

Una función creada con def no se ejecuta al quedar registrada en el espacio de nombres. El cuerpo solo corre cuando ocurre una llamada como greet("Ana") — y el valor de return regresa al llamante.

# Sin argumentos, sin valor de retorno
def print_hello():
    print("Hello World")

print_hello()        # Hello World

# Dos argumentos, un valor de retorno
def max_num(a, b):
    if a >= b:
        return a
    return b

result = max_num(30, 20)
print(result)        # 30

# return sale de la función; lo que venga después no se ejecuta
def check(x):
    if x < 0:
        return "negativo"
    return "no negativo"

print(check(-5))     # negativo

Escribe una función que aplique una tasa de descuento.

① Define def apply_discount(price, rate): y return price * (1 - rate).

② Pon apply_discount(1000, 0.2) en sale_price e imprímelo con print(f"Precio con descuento: {sale_price}").

③ Llama a apply_discount(500, 0.1) directamente dentro de print() para confirmar que la misma función se puede reutilizar con valores distintos.

(La explicación aparece una vez que ejecutes el código correctamente.)

Editor Python

Ejecutar el código para ver el resultado

Argumentos por defecto y argumentos por palabra clave

Añadir = valor a un argumento establece un valor por defecto que se usa cuando el llamante lo omite (un argumento por defecto).

En el lado de la llamada, nombre_argumento=valor te permite pasar valores por nombre independientemente de la posición (argumentos por palabra clave). Los argumentos por defecto se colocan por convención al final de la lista de argumentos para que el orden no importe.

Tres patrones de llamada y cómo se rellenan los parámetros
def greet(name, greeting="Hola"):greet("Ana")name="Ana"greeting="Hola"(default aplicado)greet(name="Ana"greeting="Hola")greet("Carlos", "Buenos días")name="Carlos"greeting="Buenos días"(sobreescritura posicional)greet(name="Carlos"greeting="Buenos días")greet(greeting="Buenas noches", name="María")name="María"greeting="Buenas noches"(orden intercambiable)greet(name="María"greeting="Buenas noches")omitirposicionalpor nombreejecutarejecutarejecutar
# Dale a greeting un valor por defecto
def greet(name, greeting="Hola"):
    return f"{greeting}, {name}"

print(greet("Ana"))                                 # Hola, Ana
print(greet("Carlos", "Buenos días"))               # Buenos días, Carlos
print(greet(greeting="Buenas noches", name="María")) # los argumentos por palabra clave se pueden reordenar
# Salida: Buenas noches, María

Escribe una función que formatee información de un usuario.

① Define def format_user(name, role="member"): y devuelve f"{name} ({role})".

② Imprime format_user("ana") (role omitido).

③ Imprime también format_user("carlos", "admin") (posicional) y format_user(role="owner", name="maria") (por palabra clave).

Editor Python

Ejecutar el código para ver el resultado

En este artículo aprendiste definiciones de funciones con def, valores de retorno con return, y argumentos por defecto y por palabra clave. Cuando uses funciones con fluidez, la misma lógica puede invocarse desde cualquier sitio tantas veces como quieras, y la legibilidad del código mejora sustancialmente.

QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Qué imprime el siguiente código?
def f(x, y=10):
return x + y

print(f(3))

Pregunta 2¿Qué llamada usa argumentos por palabra clave?
def greet(name, greeting="Hi"):
return f"{greeting}, {name}"

Pregunta 3¿Qué produce el siguiente código?
def g(x):
x + 1 # sin return

result = g(10)
print(result)