Pasar diccionarios como argumentos flexibles
Además de pasar tuplas como argumentos flexibles, también puedes pasar diccionarios como argumentos flexibles a las funciones de Python. Esto se hace utilizando el prefijo **
, que recopila los argumentos de palabra clave en un diccionario.
Desempaquetar diccionarios
Considera el siguiente ejemplo:
def greet(name, greeting):
print(f"{greeting}, {name}!")
person = {"name": "Alice", "greeting": "Hello"}
greet(**person) ## Output: Hello, Alice!
En este caso, el diccionario person
se "desempaqueta" en los parámetros name
y greeting
de la función greet()
.
Pasar diccionarios con claves variables
También puedes usar la sintaxis **kwargs
para aceptar un número variable de argumentos de palabra clave, lo cual puede ser útil cuando trabajas con diccionarios con claves variables.
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")
## Output:
## name: Alice
## age: 30
## city: New York
En este ejemplo, la función print_person_info()
puede aceptar cualquier número de argumentos de palabra clave, y todos ellos se recopilan en el diccionario kwargs
.
Combinar argumentos posicionales, de palabra clave y variables
También puedes combinar argumentos posicionales, de palabra clave y variables en una sola función. Los argumentos variables deben definirse al final de la lista de parámetros de la función.
def greet(greeting, *names, **info):
for name in names:
print(f"{greeting}, {name}!")
for key, value in info.items():
print(f"{key}: {value}")
greet("Hello", "Alice", "Bob", name="Charlie", age=30)
## Output:
## Hello, Alice!
## Hello, Bob!
## name: Charlie
## age: 30
En este caso, el parámetro greeting
es un argumento posicional, el parámetro *names
recopila todos los argumentos posicionales restantes en una tupla, y el parámetro **info
recopila todos los argumentos de palabra clave en un diccionario.
Al entender cómo pasar diccionarios como argumentos flexibles, puedes escribir funciones de Python más potentes y adaptables.