CodeGym /Cursos /Python SELF ES /Trabajo avanzado con parámetros de funciones

Trabajo avanzado con parámetros de funciones

Python SELF ES
Nivel 14 , Lección 3
Disponible

7.1 Obteniendo todos los argumentos de una función

En Python hay varias formas muy convenientes de obtener desde dentro de una función una lista de todos los parámetros que se le han pasado. Vamos a revisarlas.

Uso de *args

*args permite pasar una cantidad variable de argumentos posicionales (comunes) a una función. Estos argumentos se empaquetan en una tupla y pueden ser procesados dentro de la función.


def print_numbers(*args):
    for arg in args:
        print(arg)
        
print_numbers(1, 2, 3, 4, 5)

Explicación

La función print_numbers acepta un número arbitrario de argumentos posicionales, empaquetados en la tupla args. Podemos iterar sobre los argumentos dentro de la función usando un bucle for.

Ventajas

  • Flexibilidad: Permite pasar cualquier cantidad de argumentos a una función.
  • Versatilidad: Puede ser usado para funciones con un número indefinido de parámetros.

Uso de **kwargs

**kwargs permite pasar una cantidad variable de argumentos nombrados a una función. Estos argumentos se empaquetan en un diccionario y pueden ser procesados dentro de la función.


def print_person_info(**kwargs):
    for key, value in kwargs.items():
        print(f"{key}: {value}")
        
print_person_info(name="Alice", age=30, city="New York")

Explicación

La función print_person_info acepta un número arbitrario de argumentos nombrados, empaquetados en el diccionario kwargs. Podemos iterar sobre los argumentos dentro de la función usando el método items() del diccionario.

Ventajas

  • Flexibilidad: Permite pasar cualquier cantidad de argumentos nombrados a una función.
  • Legibilidad: Los argumentos nombrados hacen que las llamadas a funciones sean más legibles.

7.2 Fijación del tipo de argumentos

Solo argumentos posicionales

En Python 3.8 y superior se pueden definir funciones con argumentos posicionales, que solo se pueden pasar por posición. Esto se hace usando el símbolo / en la definición de la función.


def greet(name, /, greeting="Hello"):
    print(f"{greeting}, {name}!")
        
greet("Alice")  # Salida: Hello, Alice!
greet("Alice", greeting="Hi")  # Salida: Hi, Alice!
# greet(name="Alice")  # Error: TypeError

Explicación

La función greet acepta el argumento name, que solo puede ser pasado por posición. Argumentos antes de / solo pueden ser pasados por posición.

Este enfoque permite restringir la forma de pasar argumentos, mejorando la legibilidad y previniendo errores.

Solo argumentos nombrados (Keyword-Only Arguments)

También se pueden definir parámetros de función que solo pueden pasarse por nombre. Esto se hace usando el símbolo * en la definición de la función.


def greet(*, name, greeting="Hello"):
    print(f"{greeting}, {name}!")
        
greet(name="Alice")  # Salida: Hello, Alice!
greet(name="Alice", greeting="Hi")  # Salida: Hi, Alice!
# greet("Alice")  # Error: TypeError

La función greet acepta el argumento name, que solo puede ser pasado por nombre. Argumentos después de * solo pueden ser pasados por nombre.

Este enfoque obliga a especificar explícitamente los nombres de los argumentos, mejorando la legibilidad del código.

Combinación de argumentos posicionales y nombrados

También puedes combinar argumentos posicionales y nombrados para lograr la máxima flexibilidad.


def greet(name, /, *, greeting="Hello"):
    print(f"{greeting}, {name}!")
        
greet("Alice")  # Salida: Hello, Alice!
greet("Alice", greeting="Hi")  # Salida: Hi, Alice!
# greet(name="Alice")  # Error: TypeError

La función greet acepta el argumento name, que solo puede ser pasado por posición, y un argumento nombrado greeting, que debe ser pasado por nombre. Usar tanto / como * permite combinar argumentos posicionales y nombrados.

Ejemplo completo de las tres situaciones:


def full_example(a, b, /, c, d, *, e, f):
    print(f"a={a}, b={b}, c={c}, d={d}, e={e}, f={f}")
        
# Llamada de función con diferentes argumentos
full_example(1, 2, 3, 4, e=5, f=6)  # Todos los argumentos se pasan correctamente
# full_example(a=1, b=2, c=3, d=4, e=5, f=6)  # Error: TypeError

Explicación

  • Solo argumentos posicionales: a y b deben ser pasados solo por posición.
  • Argumentos posicionales o nombrados comunes: c y d pueden ser pasados tanto por posición como por nombre.
  • Solo argumentos nombrados: e y f deben ser pasados solo por nombre.
Comentarios
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION