Funciones en Python con def: Guía completa con ejemplos prácticos

1. ¿Qué es def en Python?

La palabra clave def en Python se utiliza para definir funciones. Las funciones son una estructura fundamental que mejora la reutilización del código y permite organizar los programas de manera más clara. Con def puedes crear bloques de código que realicen tareas específicas y reutilizarlos tantas veces como sea necesario. Esto incrementa la legibilidad del código y reduce la probabilidad de errores.

Sintaxis básica de la palabra clave def

La sintaxis básica es la siguiente:

def nombre_funcion(param1, param2, ...):
    # instrucciones
    return valor

Después de def se escribe el nombre de la función, seguido de los parámetros entre paréntesis. Luego, tras los dos puntos, se coloca un bloque indentado con el cuerpo de la función. De forma opcional, se puede usar return para devolver un valor.

2. Sintaxis básica y uso de def

Cómo definir una función

Cuando defines una función con def, debes indicar el nombre de la función, la lista de parámetros y el bloque de instrucciones. Por ejemplo, este código muestra una función simple que imprime «Hello, World!»:

def say_hello():
    print("Hello, World!")

Esta función se ejecuta llamando a say_hello(), lo que muestra en consola el mensaje «Hello, World!».

La importancia de la indentación

En Python, la indentación es fundamental. Todo el código dentro de una función debe tener el mismo nivel de indentación. La indentación define la jerarquía de bloques, y un error en este aspecto provocará fallos de ejecución.

Llamar a una función

Para ejecutar una función definida, simplemente escribe su nombre seguido de paréntesis. Si tiene argumentos, deben incluirse dentro de los paréntesis.

say_hello()

 

Ejemplo básico de función en Python
年収訴求

3. Argumentos y valores por defecto

Argumentos posicionales y por palabra clave

Las funciones pueden recibir argumentos, que se dividen en posicionales y por palabra clave. Los argumentos posicionales se pasan en el orden en que fueron definidos. Los argumentos por palabra clave se indican con su nombre, permitiendo mayor flexibilidad en el orden de la llamada.

def greet(name, greeting="Hello"):
    print(f"{greeting}, {name}!")

En este ejemplo, greeting tiene un valor por defecto. Así, al llamar greet("Alice"), se imprimirá «Hello, Alice!».

Argumentos de longitud variable

En ocasiones, es necesario que una función acepte un número indeterminado de argumentos. En Python esto se logra con *args y **kwargs.

def print_args(*args):
    for arg in args:
        print(arg)

print_args(1, 2, 3)

En este caso, *args recoge todos los argumentos posicionales en una tupla.

4. Devolver valores con return

Uso de la instrucción return

Si deseas que una función devuelva un resultado, utiliza la instrucción return. Si no se especifica, la función devuelve None por defecto.

def add(a, b):
    return a + b

resultado = add(3, 4)
print(resultado)  # 7

La función add devuelve la suma de dos números, y este valor puede almacenarse en una variable.

Devolver múltiples valores

En Python, una función también puede devolver varios valores separados por comas, que se agrupan automáticamente en una tupla.

def swap(a, b):
    return b, a

x, y = swap(1, 2)
print(x, y)  # 2 1

 

Ejemplo de return en Python

5. Alcance y ciclo de vida de las variables

Variables locales y globales

Las variables definidas dentro de una función se llaman locales y solo existen dentro de ella. Las variables definidas fuera de cualquier función son globales y están disponibles en todo el programa.

x = "global"

def func():
    x = "local"
    print(x)

func()      # local
print(x)    # global

En este ejemplo, x dentro de func no afecta a la variable global.

La palabra clave global

Si necesitas modificar una variable global desde dentro de una función, debes declararla con global.

x = "global"

def change_global():
    global x
    x = "changed"

change_global()
print(x)  # changed

6. Ejemplos prácticos y aplicaciones

Optimización con funciones

Las funciones permiten optimizar programas evitando duplicación de código. Por ejemplo, si necesitas calcular varias veces el área de un círculo:

def calculate_area(radius):
    return 3.14 * radius * radius

area1 = calculate_area(5)
area2 = calculate_area(10)

Ejemplo de formato de texto

También puedes crear funciones para dar formato a cadenas:

def format_text(text, alignment="left"):
    if alignment == "left":
        return text.ljust(20)
    elif alignment == "right":
        return text.rjust(20)
    elif alignment == "center":
        return text.center(20)

print(format_text("Hello", "center"))

Esta función permite alinear texto a la izquierda, derecha o centro.

Ejemplo práctico de función en Python

7. Conceptos avanzados de funciones

Funciones anidadas

En Python es posible definir una función dentro de otra, conocidas como funciones anidadas. Estas solo pueden ser llamadas desde la función externa.

def outer():
    def inner():
        print("Esta es la función interna")
    inner()

Funciones anónimas (Lambda)

Con la palabra clave lambda puedes crear funciones anónimas, útiles para operaciones simples que se usan una sola vez.

square = lambda x: x * x
print(square(5))  # 25

Decoradores

Los decoradores permiten extender el comportamiento de una función sin modificar su código original. Se definen como funciones que reciben otra función y devuelven una nueva.

def decorator(func):
    def wrapper():
        print("Antes de la función")
        func()
        print("Después de la función")
    return wrapper

@decorator
def say_hello():
    print("Hello!")

say_hello()

8. Conclusión

En este artículo hemos explicado cómo definir funciones en Python usando def, el uso de argumentos, valores de retorno, alcance de variables y conceptos avanzados como lambdas y decoradores. Dominar las funciones te permitirá escribir programas más claros, eficientes y fáciles de mantener. Te animamos a practicar creando tus propias funciones para mejorar tu nivel de programación en Python.

Resumen sobre funciones en Python

9. Preguntas frecuentes (FAQs)

¿Cuál es la diferencia entre return y print?

Aunque parecen similares, cumplen funciones distintas. return devuelve un valor desde la función para usarlo en otra parte del programa, mientras que print solo muestra el resultado en la consola.

def add(a, b):
    return a + b

resultado = add(3, 4)  # resultado = 7
print(resultado)  # 7

def display_message():
    print("Hello, World!")

display_message()  # imprime en consola, pero no devuelve valor

¿Qué ventajas tienen las funciones anidadas?

Permiten crear funciones locales que no son accesibles desde fuera, favoreciendo la encapsulación y el orden del código. Además, pueden acceder a variables de la función externa.

¿Cuándo usar argumentos variables?

Se utilizan cuando el número de argumentos no es fijo. Por ejemplo, para sumar una cantidad indefinida de números:

def add_all(*args):
    return sum(args)

resultado = add_all(1, 2, 3, 4, 5)  # 15

¿Cómo funciona la recursividad?

Una función recursiva es aquella que se llama a sí misma. Es útil para problemas como el cálculo de factoriales, aunque debe usarse con cuidado para evitar desbordamiento de pila.

def factorial(n):
    if n == 0:
        return 1
    else:
        return n * factorial(n-1)

resultado = factorial(5)  # 120