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.