2.14. Визначення функцій¶
Функція упаковує блок коду під назвою, щоб його можна було викликати з багатьох місць. Скрізь, де обчислення, дія або певний фрагмент роботи зустрічається більше одного разу, функція перетворює його на єдину іменовану річ.
Ключове слово – def:
def greet(name):
print("hello,", name)
greet("Alice")
greet("Bob")
Виведення:
hello, Alice
hello, Bob
Рядок, що починається з def, – це визначення – воно створює функцію, але не виконує тіло. Виклик greet("Alice") – це те, що виконує відступний блок.
2.14.1. Параметри та аргументи¶
Назви в дужках у рядку def – це параметри – заповнювачі для значень, які надасть викликаючий код. Фактичні передані значення – це аргументи. Функція може приймати нуль або більше параметрів:
def square(x):
return x * x
def add(a, b):
return a + b
def is_even(n):
return n % 2 == 0
Виклик із неправильною кількістю аргументів негайно викидає TypeError.
2.14.2. return¶
Оператор return негайно завершує функцію і повертає значення викликаючому коду:
def absolute(x):
if x < 0:
return -x
return x
Функція, яка ніколи не досягає return (або має голий return без значення), повертає None:
>>> def shout(text):
... print(text.upper())
...
>>> result = shout("hi")
HI
>>> print(result)
None
Функція може мати кілька операторів return; перший досягнутий перемагає, а решта тіла пропускається.
2.14.2.1. Повернення кількох значень¶
Python повертає один об’єкт на виклик, але цим об’єктом може бути tuple – і викликаючий код може розпакувати його на місці:
def minmax(values):
return (min(values), max(values))
lo, hi = minmax([3, 1, 4, 1, 5, 9])
Дужки навколо значення, що повертається, є необов’язковими; return a, b і return (a, b) – одне й те саме.
2.14.3. Рядки документації¶
Рядковий літерал, розміщений як перший оператор у тілі функції, є рядком документації. Він зберігається в об’єкті функції і є тим, що відображає help():
def scale(value, factor):
"""Multiply ``value`` by ``factor`` and return the result."""
return value * factor
IDE показує рядки документації у підказках при наведенні курсора на назву функції, тому навіть однорядковий підсумок виправдовує себе. Рядки з потрійними лапками дозволяють рядку документації охоплювати кілька рядків, коли потрібно більше деталей.
2.14.4. Угоди щодо найменування¶
Назви функцій використовують snake_case – слова в нижньому регістрі, розділені підкресленнями. Назва має описувати, що робить функція:
Добре:
read_temperature,parse_header,is_valid.Уникайте:
do_stuff,handle1,temp_func.
Початкове підкреслення (_helper) позначає функцію як внутрішню для її модуля. Угода широко дотримується, але Python її не примушує.