Cómo utilizar *args y **kwargs en funciones de Python
Domina *args y **kwargs en Python. Aprenda a escribir funciones flexibles con argumentos dinámicos posicionales y de palabras clave, descomprimir colecciones y crear funciones contenedoras.
Descripción general
En Python, a menudo necesitarás diseñar funciones que puedan aceptar una cantidad variable de argumentos. Por ejemplo, una función que calcula la suma de cualquier número de números enteros o una función que registra metadatos con diferentes campos. En lugar de obligar a los usuarios a pasar una lista o diccionario, Python proporciona dos símbolos especiales: `*args` y `**kwargs`.
La sintaxis `*args` permite que una función acepte cualquier número de argumentos posicionales. El único asterisco `*` actúa como operador de desembalaje. Cuando se coloca en la definición de una función, recopila argumentos posicionales adicionales en una tupla llamada "args". Esto le permite iterar sobre los valores de entrada, ejecutar cálculos o pasarlos a otra función con facilidad.
La sintaxis `**kwargs`, por otro lado, permite que una función acepte cualquier número de argumentos de palabras clave (con nombre). El doble asterisco `**` recopila estos argumentos en un diccionario llamado `kwargs`. Esto es increíblemente útil para pasar configuraciones opcionales, argumentos de estilo o atributos de bases de datos. Recuerde, los nombres 'args' y 'kwargs' son convenciones; la funcionalidad real está impulsada por los asteriscos simples y dobles.
Código y salida de ejecución
Este código demuestra el uso de *args para sumar números de variables, **kwargs para imprimir perfiles de usuario y la combinación de ambos en una sola función.
def sum_all(*args):
print("args type:", type(args).__name__)
return sum(args)
print("Sum (1, 2, 3):", sum_all(1, 2, 3))
print("Sum (10, 20):", sum_all(10, 20))
def print_profile(**kwargs):
print("kwargs type:", type(kwargs).__name__)
for key, value in kwargs.items():
print(f"{key}: {value}")
print_profile(name="Bob", role="developer", country="US")
def master_function(first, *args, **kwargs):
print(f"First argument: {first}")
print(f"Additional positional args: {args}")
print(f"Keyword args: {kwargs}")
master_function("hello", 1, 2, 3, debug=True, user_id=42)args type: tuple
Sum (1, 2, 3): 6
args type: tuple
Sum (10, 20): 30
kwargs type: dict
name: Bob
role: developer
country: US
First argument: hello
Additional positional args: (1, 2, 3)
Keyword args: {'debug': True, 'user_id': 42}Implementación paso a paso
- Utilice un solo asterisco antes de un parámetro (por ejemplo, *args) para reunir argumentos posicionales en una tupla.
- Utilice un asterisco doble antes de un parámetro (por ejemplo, **kwargs) para recopilar argumentos de palabras clave en un diccionario.
- Mantenga el orden correcto de los parámetros: parámetros estándar, *args, parámetros de solo palabras clave y luego **kwargs.
- Utilice la sintaxis de descompresión al llamar a funciones pasando *iterable o **diccionario.
Preguntas frecuentes
¿Tengo que utilizar los nombres "args" y "kwargs"?
No, estas son convenciones comunitarias estándar. Sintácticamente sólo se requieren los prefijos * y **. Podría escribir *valores y **opciones, pero se recomienda encarecidamente atenerse a *args y **kwargs para facilitar la lectura.
¿Cuál es el orden correcto al definir una función?
El orden correcto de los argumentos en la firma de una función es: argumentos posicionales, *args, argumentos de solo palabras clave y finalmente **kwargs.
Temas relacionados
Aprenda a crear una clase en Python. Domine el constructor __init__, los métodos de instancia, la palabra clave self y la creación de instancias de objetos.
Cómo utilizar funciones Lambda en PythonAprenda a utilizar funciones lambda en Python. Domine funciones anónimas, devoluciones de llamadas en línea y clasificación de datos de listas con claves lambda.
Recursos recomendados de Python
Amplíe sus conocimientos con tutoriales interactivos relacionados, hojas de trucos y comparaciones de códigos.
Bucles de Python
Aprenda a utilizar bucles de Python para iterar sobre datos. Domine los bucles for, while, rompa, continúe y realice bucles con ejemplos interactivos.
Hoja de trucos sobre métodos de cadenas de Python
Una guía de referencia completa para la manipulación de cadenas de Python. Domine el formateo, la búsqueda, la división, el reemplazo y la verificación de las propiedades de las cadenas.
Python vs JavaScript: ¿Qué lenguaje de programación es mejor?
Una comparación completa entre Python y JavaScript. Explore las diferencias de sintaxis, el rendimiento, los casos de uso (backend frente a frontend) y ejemplos de codificación.