Передача
списка
153
В итоге для каждой пиццы указывается размер и количество дополнений, и каждый
фрагмент информации выводится в положенном месте: сначала размер, а потом
дополнения:
Making a 16-inch pizza with the following toppings:
- pepperoni
Making a 12-inch pizza with the following toppings:
- mushrooms
- green peppers
- extra cheese
Использование произвольного набора именованных аргументов
Иногда программа должна получать произвольное количество аргументов, но вы
не знаете заранее, какая информация будет передаваться функции. В таких случаях
можно написать функцию, получающую столько пар «ключ—значение», сколько
указано в команде вызова. Один из возможных примеров — построение пользова-
тельских профилей: вы знаете, что вы получите информацию о пользователе, но
не знаете заранее, какую именно. Функция
build_profile()
в следующем примере
всегда получает имя и фамилию, но также может получать произвольное количе-
ство именованных аргументов:
user_profile.py
def build_profile(first, last, **user_info):
"""Строит словарь с информацией о пользователе."""
profile = {}
profile['first_name'] = first
profile['last_name'] = last
for key, value in user_info.items():
profile[key] = value
return profile
user_profile = build_profile('albert', 'einstein',
location='princeton',
field='physics')
print(user_profile)
Определение
build_profile()
ожидает получить имя и фамилию пользователя,
а также позволяет передать любое количество пар «имя—значение». Две звездочки
перед параметром
**user_info
заставляют Python создать пустой словарь с име-
нем
user_info
и упаковать в него все полученные пары «имя—значение». Внутри
функции вы можете обращаться к парам «имя–значение» из
user_info
точно так
же, как в любом словаре.
В теле
build_profile()
создается пустой словарь с именем
profile
для хранения
профиля пользователя. В точке
в словарь добавляется имя и фамилия, потому
что эти два значения всегда передаются пользователем. В точке
функция пере-
бирает дополнительные пары «ключ—значение» в словаре
user_info
и добавляет
каждую пару в словарь
profile
. Наконец, словарь
profile
возвращается в точку
вызова функции.