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.