Передача аргументов
139
print("\nI have a " + animal_type + ".")
print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet('harry', 'hamster')
В этом вызове функции сначала передается имя, а потом тип животного. Так как
аргумент
'harry'
находится в первой позиции, значение сохраняется в параметре
animal_type
, а аргумент
'hamster'
сохраняется в
pet_name
. На этот раз вывод полу-
чается бессмысленным:
I have a harry.
My harry's name is Hamster.
Если вы получили подобные странные результаты, проверьте, соответствует ли
порядок следования аргументов в вызове функции порядку параметров в ее опре-
делении.
Именованные
аргументы
Именованный аргумент
представляет собой пару «имя—значение», передаваемую
функции. Имя и значение связываются с аргументом напрямую, так что при пере-
даче аргумента путаница с порядком исключается. Именованные аргументы из-
бавляют от хлопот с порядком аргументов при вызове функции, а также проясняют
роль каждого значения в вызове функции.
Перепишем
программу
pets .py
с использованием
именованных аргументов
при вызове
describe_pet()
:
def describe_pet(animal_type, pet_name):
"""Выводит информацию о животном."""
print("\nI have a " + animal_type + ".")
print("My " + animal_type + "'s name is " + pet_name.title() + ".")
describe_pet(animal_type='hamster', pet_name='harry')
Функция
describe_pet()
не изменилась. Однако на этот раз при вызове функ-
ции мы явно сообщаем Python, с каким параметром должен быть связан каждый
аргумент. При обработке вызова функции Python знает, что аргумент
'hamster'
должен быть сохранен в параметре
animal_type
, а аргумент
'harry'
в параметре
pet_name
.
Порядок следования именованных аргументов в данном случае не важен, потому
что Python знает, где должно храниться каждое значение. Следующие два вызова
функции эквивалентны:
describe_pet(animal_type='hamster', pet_name='harry')
describe_pet(pet_name='harry', animal_type='hamster')
Достарыңызбен бөлісу: