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 її не примушує.