Книга «Изучаем Python»



Pdf көрінісі
бет95/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   91   92   93   94   95   96   97   98   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )


Глава 8 • Функции
('pepperoni',) 
('mushrooms', 'green peppers', 'extra cheese')
Теперь команду 
print
можно заменить циклом, который перебирает список 
дополнений и выводит описание заказанной пиццы:
def make_pizza(*toppings):
"""Выводит описание пиццы."""
print("\nMaking a pizza with the following toppings:")
for topping in toppings:
print("- " + topping)
make_pizza('pepperoni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')
Функция реагирует соответственно независимо от того, сколько значений она 
получила — одно или три:
Making a pizza with the following toppings: 
- pepperoni 
Making a pizza with the following toppings: 
- mushrooms 
- green peppers 
- extra cheese
Этот синтаксис работает независимо от количества аргументов, переданных 
функции.
Позиционные аргументы с произвольными наборами аргументов
Если вы хотите, чтобы функция могла вызываться с разными количествами аргу-
ментов, параметр для получения произвольного количества аргументов должен 
стоять на последнем месте в определении функции. Python сначала подбирает со-
ответствия для позиционных и именованных аргументов, а потом объединяет все 
остальные аргументы в последнем параметре.
Например, если функция должна получать размер пиццы, этот параметр должен 
стоять в списке до параметра 
*toppings
:
def make_pizza(size, *toppings): 
"""Выводит описание пиццы."""
print("\nMaking a " + str(size) + 
"-inch pizza with the following toppings:") 
for topping in toppings: 
print("- " + topping) 
make_pizza(16, 'pepperoni') 
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
В определении функции Python сохраняет первое полученное значение в параметре 
size
. Все остальные значения, следующие за ним, сохраняются в кортеже 
toppings

В вызовах функций на первом месте располагается аргумент для параметра 
size

а за ним следует сколько угодно дополнений.


Передача списка
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
возвращается в точку 
вызова функции.


154

Достарыңызбен бөлісу:
1   ...   91   92   93   94   95   96   97   98   ...   266




©engime.org 2024
әкімшілігінің қараңыз

    Басты бет