Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
KL-LAB7(9).doc
Скачиваний:
13
Добавлен:
12.02.2016
Размер:
863.74 Кб
Скачать

4.1 Вхідні та вихідні дані функції

Інформація передається до функції за допомогою параметрів функції. Параметри функції, це список змінних та констант, які записані в круглих дужках після назви функції при визначенні (оголошенні) функції. Розглянемо приклад:

 

>>> def repeat(msg, num): #1

... return ' '.join([msg] * num)

>>> monty = 'Monty Python'

>>> repeat(monty, 3) #2

'Monty Python Monty Python Monty Python'

В прикладі визначається функція з двома параметрами, msgтаnum#1. Коли функція викликається то до неї передаються два аргументи ,montyта3#2. Ці аргументи записані в місцях , що відповідають параметрам функції і передаються до функції, якmsgтаnum.

Параметри функції не є обов’язковими, наприклад:

 

>>> def monty():

... return "Monty Python"

>>> monty()

'Monty Python'

Функція, зазвичай, передає результати своєї роботи програмі з якої вона викликалася за допомогою твердження return.Наступний приклад демонструє, як виклик функції може бути замінений на результат роботи функції:

 

>>> repeat(monty(), 3)

'Monty Python Monty Python Monty Python'

>>> repeat('Monty Python', 3)

'Monty Python Monty Python Monty Python'

Функція в Python не обов’язково повинна мати return твердження. Функції без return твердження виконують побічну роботу, таку як роздрук результатів, модифікація файлу чи оновлення значення параметру і часто їх називають – процедурами.

Розглянемо наступні три функції сортування. Застосовувати третю функцію небезпечно, тому що при використанні цієї функції змінюються її вхідні дані. Функції повинні модифікувати вміст параметру (my_sort1()), або повертати значення (my_sort2()), але не робити це одночасно (my_sort3()).

 

>>> def my_sort1(mylist): # good: modifies its argument, no return value

... mylist.sort()

>>> def my_sort2(mylist): # good: doesn't touch its argument, returns value

... return sorted(mylist)

>>> def my_sort3(mylist): # bad: modifies its argument and also returns it

... mylist.sort()

... return mylist

4.2 Передавання (передача) параметрів

Повертаючись до пункту 1., згадуємо, що операція присвоювання працює зі значеннями, але значення структурованого об’єкту це є посилання на цей об’єкт. Це також справедливо і для функцій. Python інтерпретує параметри функції, як значення (параметри передаються черезвиклик за величиною, девеличина- завждипосиланняна об'єкт, а не величина самого об'єкта.). В наступному прикладі,set_up()має два параметри, які модифікуються функцією. Створивши пусту стрічкуwта пустий списокp, після виклику функції,w- залишилася без змін аpзмінене:

 

>>> def set_up(word, properties):

... word = 'lolcat'

... properties.append('noun')

... properties = 5

...

>>> w = ''

>>> p = []

>>> set_up(w, p)

>>> w

''

>>> p

['noun']

Значення wфункцією не було змінене. Коли здійснювався викликset_up(w, p), значенняw(пуста стрічка) присвоюється новій зміннійword. В функції, значенняwordзмінилося, але ці зміни не торкнулисяw. Така передача параметрів ідентична до наступної послідовності операцій присвоювання:

 

>>> w = ''

>>> word = w

>>> word = 'lolcat'

>>> w

''

Розглянемо, що відбувається зі списком p. Коли здійснювався викликset_up(w, p), значенняp(посилання на пустий список) присвоюється новій локальній зміннійproperties, і дві змінні тепер посилаються на те саме місце в пам’яті. Функція змінюєproperties, і ці зміни також стосуються іp. Функція також присвоює нове значення properties (число 5); але ця дія не змінює вміст комірки пам’яті а створює нову локальну змінну. Поведінка функції відповідає наступній послідовності операцій присвоювання:

 

>>> p = []

>>> properties = p

>>> properties.append('noun')

>>> properties = 5

>>> p

['noun']

Для розуміння передачі параметрів у Python (передача через виклик за величиною) потрібно розуміти як працює операція присвоювання. Для контролю (розуміння) об’єктів рекомендується використовувати вбудовану функціюid() таisоператор після кожного твердження (рядка програми).

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]