Ejemplos prácticos de *args y **kwargs
Función variádica para operaciones aritméticas
Vamos a crear una función que pueda realizar diversas operaciones aritméticas en cualquier número de argumentos.
def arithmetic_operations(*args, operator='+'):
result = args[0]
for i in range(1, len(args)):
if operator == '+':
result += args[i]
elif operator == '-':
result -= args[i]
elif operator == '*':
result *= args[i]
elif operator == '/':
result /= args[i]
return result
print(arithmetic_operations(1, 2, 3, 4, operator='+')) ## Output: 10
print(arithmetic_operations(10, 3, 2, operator='-')) ## Output: 5
print(arithmetic_operations(2, 3, 4, operator='*')) ## Output: 24
print(arithmetic_operations(20, 4, operator='/')) ## Output: 5.0
En este ejemplo, la función arithmetic_operations() puede aceptar cualquier número de argumentos utilizando *args, y la operación aritmética deseada se especifica utilizando el argumento de palabra clave operator.
Recopilando entrada del usuario con *args
Supongamos que quieres crear una función que recopile un número arbitrario de entradas del usuario y las almacene en una lista.
def collect_inputs(*args):
user_inputs = []
for arg in args:
user_input = input(f"Enter {arg}: ")
user_inputs.append(user_input)
return user_inputs
names = collect_inputs("name", "age", "city")
print(names)
## Output:
## Enter name: LabEx
## Enter age: 30
## Enter city: New York
## ['LabEx', '30', 'New York']
En este ejemplo, la función collect_inputs() utiliza *args para aceptar un número arbitrario de mensajes de solicitud, y luego recopila las respuestas del usuario y las almacena en una lista.
Función de registro con **kwargs
Imagina que quieres crear una función de registro que pueda registrar mensajes con diferentes niveles (por ejemplo, depuración, información, advertencia, error) e incluir metadatos adicionales.
def log_message(**kwargs):
log_level = kwargs.get('level', 'info')
message = kwargs['message']
metadata = kwargs.get('metadata', {})
print(f"[{log_level.upper()}] {message}")
for key, value in metadata.items():
print(f" {key}: {value}")
log_message(level='debug', message='This is a debug message')
## Output:
## [DEBUG] This is a debug message
log_message(level='warning', message='Something unusual happened', metadata={'user': 'LabEx', 'timestamp': '2023-04-18 12:34:56'})
## Output:
## [WARNING] Something unusual happened
## user: LabEx
## timestamp: 2023-04-18 12:34:56
En este ejemplo, la función log_message() utiliza **kwargs para aceptar un número arbitrario de argumentos de palabra clave, incluyendo el nivel de registro, el mensaje y metadatos opcionales.