Функции
127
Если мы передадим answer в функцию run_something(), то используем ее как
данные, прямо как и другие объекты:
>>> run_something(answer)
42
Обратите внимание: вы передали строку answer, а не answer(). В Python круглые
скобки означают «вызови эту функцию». Если скобок нет, Python относится к функ-
ции как к любому другому объекту. Это происходит потому, что, как и все осталь-
ное в Python, функция является объектом:
>>> type(run_something)
<class 'function'>
Попробуем запустить функцию с аргументами. Определим функцию add_args(),
которая выводит на экран сумму двух числовых аргументов, arg1 и arg2:
>>> def add_args(arg1, arg2):
... print(arg1 + arg2)
Чем является add_args()?
>>> type(add_args)
<class 'function'>
Теперь определим функцию, которая называется run_something_with_args()
и принимает три аргумента:
func — функция, которую нужно запустить;
arg1 — первый аргумент функции func;
arg2 — второй аргумент функции func:
>>> def run_something_with_args(func, arg1, arg2):
... func(arg1, arg2)
Когда вы вызываете функцию run_something_with_args(), та функция, что пере-
дается вызывающей стороной, присваивается параметру func, а переменные arg1
и arg2 получают значения, которые следуют далее в списке аргументов. Вызов
func(arg1, arg2) выполняет данную функцию с этими аргументами, потому что
круглые скобки указывают Python сделать это.
Проверим функцию run_something_with_args(), передав ей имя функции add_args
и аргументы 5 и 9:
>>> run_something_with_args(add_args, 5, 9)
14
Внутри функции run_something_with_args() аргумент add_args, представляющий
собой имя функции, был присвоен параметру func, 5 — параметру arg1, а 9 — пара-
пара-
метру arg2. В итоге получается следующая конструкция:
add_args(5, 9)
128
Глава 4. Корочка Python: структуры кода
Вы можете объединить этот прием с использованием *args и **kwargs.
Определим тестовую функцию, которая принимает любое количество пози-
ционных аргументов, определяет их сумму с помощью функции sum() и возвра-
щает ее:
>>> def sum_args(*args):
... return sum(args)
Я не упоминал функцию sum() ранее. Это встроенная в Python функция, которая