Сообщить об ошибке.

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

Поскольку функции являются объектами, можно передавать их в качестве аргументов другим функциям. Функция talk(), которая изменяет строку, используя переданный ей объект функции, а затем печатает ее:

def talk(say):
    prt = say('Мир')
    print(prt)

Вы можете влиять на полученное сообщение, передавая различные функции:

def hello(name):
    return f'Привет {name}.'

def goodbye(name):
    return f'Пока {name}.'

>>> talk(hello)
# Привет Мир.

>>> talk(goodbye)
# Пока Мир.

Важно. Функция hello передается функции talk() без скобок. Это означает, что передается только ссылка на функцию hello. Функция при этом не выполняется. Функция talk(), записывается со скобками, поэтому она будет вызываться как обычно.

Возможность передавать функциональные объекты в качестве аргументов другим функциям является мощной фишкой. Это позволяет абстрагироваться от функционала и передать поведение. В примере выше функция talk() остается прежней, но сохраняет возможность влиять на ее вывод, передавая различные варианты сообщений.

Функции, которые могут принимать другие функции в качестве аргументов, также называются функциями высшего порядка. Они необходимы для функционального стиля программирования.

Классическим примером функций высшего порядка в Python является встроенная функция map(). Она принимает в качестве аргументов функцию и итерируемую последовательность и вызывает функцию для каждого элемента в последовательности.

Вот как можно отформатировать последовательность имен, сопоставив им функцию приветствия hello():

>>> list(map(hello, ['Юля', 'Миша', 'Андрей', 'София']))
# ['Привет Юля.', 'Привет Миша.', 
# 'Привет Андрей.', 'Привет София.']