Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 93

... func()

Функции

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 функция, которая