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



Pdf көрінісі
бет86/266
Дата03.03.2023
өлшемі7,86 Mb.
#170986
түріКнига
1   ...   82   83   84   85   86   87   88   89   ...   266
Байланысты:
Изучаем Python. Программирование игр, визуализация данных, веб-приложения ( PDFDrive )


Глава 8 • Функции
Из определения 

видно, что функции должен передаваться тип животного 
(
animal_type
) и его имя (
pet_name
). При вызове 
describe_pet()
необходимо пере-
дать тип и имя — именно в таком порядке. В этом примере аргумент 
'hamster'
сохраняется в параметре 
animal_type
, а аргумент 
'harry'
сохраняется в параметре 
pet_name

. В теле функции эти два параметра используются для вывода инфор-
мации:
I have a hamster. 
My hamster's name is Harry.
Многократные вызовы функций
Функция может вызываться в программе столько раз, сколько потребуется. Для 
вывода информации о другом животном достаточно одного вызова 
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('hamster', 'harry')
describe_pet('dog', 'willie')
Во втором вызове функции 
describe_pet()
передаются аргументы 
'dog'
и 
'willie'

По аналогии с предыдущей парой аргументов Python сопоставляет аргумент 
'dog'
с параметром 
animal_type
, а аргумент 
'willie'
с параметром 
pet_name
.
Как и в предыдущем случае, функция выполняет свою задачу, но на этот раз вы-
водятся другие значения:
I have a hamster. 
My hamster's name is Harry. 
I have a dog. 
My dog's name is Willie.
Многократный вызов функции — чрезвычайно эффективный способ работы. Код 
вывода информации о домашнем животном пишется один раз в функции. Каждый 
раз, когда вы захотите вывести информацию о новом животном, вы вызываете 
функцию с данными нового животного. Даже если код вывода информации раз-
растется до 10 строк, вы все равно сможете вывести информацию всего одной 
командой — для этого достаточно снова вызвать функцию.
Функция может иметь любое количество позиционных аргументов. При вызове 
функции Python перебирает аргументы, приведенные в вызове, и сопоставляет 
каждый аргумент с соответствующим параметром из определения функции.
О важности порядка позиционных аргументов
Если нарушить порядок следования аргументов в вызове при использовании по-
зиционных аргументов, возможны неожиданные результаты:
def describe_pet(animal_type, pet_name):
"""Выводит информацию о животном."""


Передача аргументов
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')


Достарыңызбен бөлісу:
1   ...   82   83   84   85   86   87   88   89   ...   266




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

    Басты бет