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



Pdf көрінісі
бет79/238
Дата07.01.2022
өлшемі7,86 Mb.
#18670
түріКнига
1   ...   75   76   77   78   79   80   81   82   ...   238
Байланысты:
2 5343781172763690906

ПРИМЕЧАНИЕ

Иногда  в  литературе  термины  «аргумент»  и  «параметр»  используются  как  синонимы .  Не  удив-

ляйтесь, если переменные в определении функции вдруг будут названы аргументами, а значения, 

переданные при вызове функции, — параметрами .

УПРАЖНЕНИЯ

8-1 . Сообщение: напишите функцию display_message() для вывода сообщения по теме, рас-

сматриваемой в этой главе . Вызовите функцию и убедитесь в том, что сообщение выво-

дится правильно .

8-2 .  Любимая  книга:  напишите  функцию  favorite_book(),  которая  получает  один  пара-

метр title . Функция должна выводить сообщение вида «One of my favorite books is Alice in 

Wonderland» . Вызовите функцию и убедитесь в том, что название книги правильно пере-

дается как аргумент при вызове функции . 

Передача аргументов

Определение функции может иметь несколько параметров, и может оказаться, что 

при вызове функции должны передаваться несколько аргументов. Существуют 

несколько способов передачи аргументов функциям. Позиционные аргументы 

перечисляются в порядке, точно соответствующем порядку записи параметров; 

именованные аргументы состоят из имени переменной и значения; наконец, суще-

ствуют списки и словари значений. Рассмотрим все эти способы.

Позиционные аргументы

При вызове функции каждому аргументу должен быть поставлен в соответствие 

параметр в определении функции. Проще всего сделать это на основании порядка 

перечисления аргументов. Значения, связываемые с аргументами подобным об-

разом, называются позиционными аргументами.

Чтобы понять, как работает эта схема, рассмотрим функцию для вывода информа-

ции о домашних животных. Функция сообщает тип животного и его имя:

pets.py

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')




138    Глава 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   ...   75   76   77   78   79   80   81   82   ...   238




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

    Басты бет