М97 Изучаем Python: программирование игр, визуализация данных, веб-приложения



Pdf көрінісі
бет110/334
Дата18.10.2023
өлшемі6,19 Mb.
#186390
1   ...   106   107   108   109   110   111   112   113   ...   334
Байланысты:
Изучаем Python


Глава 8 • Функции
pets.py

def describe_pet(animal_type, pet_name):
"""Выводит информацию о животном."""
print(f"\nI have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")

describe_pet('hamster', 'harry')
Из определения 

видно, что функции должен передаваться тип животного 
(
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(f"\nI have a {animal_type}.")
print(f"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 строк, вы все равно сможете вывести информацию всего одной 
командой — для этого достаточно снова вызвать функцию.


Передача аргументов
147
Функция может иметь любое количество позиционных аргументов. При вызове 
функции Python перебирает аргументы, приведенные в вызове, и сопоставляет 
каждый аргумент с соответствующим параметром из определения функции.
О важности порядка позиционных аргументов
Если нарушить порядок следования аргументов в вызове при использовании по-
зиционных аргументов, возможны неожиданные результаты:
def describe_pet(animal_type, pet_name):
"""Выводит информацию о животном."""
print(f"\nI have a {animal_type}.")
print(f"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(f"\nI have a {animal_type}.")
print(f"My {animal_type}'s name is {pet_name.title()}.")
describe_pet(animal_type='hamster', pet_name='harry')
Функция 
describe_pet()
не изменилась. Однако на этот раз при вызове функции 
мы явно сообщаем Python, с каким параметром должен быть связан каждый аргу-


148
Глава 8 • Функции
мент. При обработке вызова функции 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   ...   106   107   108   109   110   111   112   113   ...   334




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

    Басты бет