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. Строки документации#

Строковый литерал, помещённый первым оператором в теле функции, – это строка документации (docstring). Она хранится в объекте функции и именно её отображает 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.