Передача словарей в качестве гибких аргументов
В дополнение к передаче кортежей в качестве гибких аргументов, вы также можете передавать словари в качестве гибких аргументов в функции Python. Это делается с использованием префикса **
, который собирает именованные аргументы (keyword arguments) в словарь.
Распаковка словарей
Рассмотрим следующий пример:
def greet(name, greeting):
print(f"{greeting}, {name}!")
person = {"name": "Alice", "greeting": "Hello"}
greet(**person) ## Output: Hello, Alice!
В этом случае словарь person
"распаковывается" в параметры name
и greeting
функции greet()
.
Передача словарей с различными ключами
Вы также можете использовать синтаксис **kwargs
для приема переменного количества именованных аргументов, что может быть полезно при работе со словарями с различными ключами.
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
В этом примере функция print_person_info()
может принимать любое количество именованных аргументов, и все они собираются в словарь kwargs
.
Комбинирование позиционных, именованных и переменных аргументов
Вы также можете комбинировать позиционные аргументы, именованные аргументы и переменные аргументы в одной функции. Переменные аргументы должны быть определены последними в списке параметров функции.
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
В этом случае параметр greeting
является позиционным аргументом, параметр *names
собирает все оставшиеся позиционные аргументы в кортеж, а параметр **info
собирает все именованные аргументы в словарь.
Понимая, как передавать словари в качестве гибких аргументов, вы можете писать более мощные и адаптивные функции Python.