Функции - объекты первого класса#

В Python все функции являются объектами первого класса. Это означает, что Python поддерживает:

  • передачу функций в качестве аргументов другим функциям

  • возвращение функции как результата других функций

  • присваивание функций переменным

  • сохранение функций в структурах данных

Например, первый пункт «передача функций в качестве аргументов другим функциям» встречается при использовании встроенной функции map. Тут map применяет функцию str к каждому элементу списка:

In [1]: list(map(str, [1, 2, 3]))
Out[1]: ['1', '2', '3']

Функция delay ожидает как аргумент задержку в секундах, другую функцию и ее аргументы:

import time

def delay(seconds, func, *args, **kwargs):
    print(f'Delay {seconds} seconds...')
    time.sleep(seconds)
    return func(*args, **kwargs)

Теперь функции delay можно передавать любую другую функцию как аргумент и она выполнится после указанной паузы:

def summ(a, b):
    return a + b


In [5]: delay(5, summ, 1, 4)
Delay 5 seconds...
Out[5]: 5

Сохранение функций в структурах данных:

In [8]: functions = [delay, summ]

In [9]: functions
Out[9]:
[<function __main__.delay(seconds, func, *args, **kwargs)>,
 <function __main__.summ(a, b)>]

Присваивание функций переменным:

In [10]: delay_execution = delay

In [11]: delay_execution
Out[11]: <function __main__.delay(seconds, func, *args, **kwargs)>

In [12]: delay_execution(5, summ, 1, 4)
Delay 5 seconds...
Out[12]: 5