Найти в Дзене

Передача функции в функцию в Python

В Python, как и в некоторых других языках, в качестве аргумента в функцию можно передавать другую функцию. Однако при этом следует помнить, что функция, принимающая значение, может воспринимать это по разному. То есть при передаче функции в функцию передаваемая функция может быть воспринята принимающей функцией: Пример: Здесь у нас есть две функции - А и В. Функция В просто выводит какую-то строку. А вот функция А принимает параметр, и этим параметром в Python может быть что угодно. Поэтому в теле функции А мы сначала проверяем, является ли параметр функцией (проверяем с помощью callable()), а потом уже решаем, что с этим делать. Если это функция, то мы выводим её на экран в двух видах: f - как объект f() - как результат выполнения функции В первом случае будет просто выведено названия объекта. В нашем случае это функция и адрес этой функции. Во втором случае будет выведен результат работы функции. И поскольку мы в функцию А передали функцию В, то будет выведен результат выполнения фун

В Python, как и в некоторых других языках, в качестве аргумента в функцию можно передавать другую функцию. Однако при этом следует помнить, что функция, принимающая значение, может воспринимать это по разному. То есть при передаче функции в функцию передаваемая функция может быть воспринята принимающей функцией:

  • Как результат выполнения функции
  • Как объект функции

Пример:

Здесь у нас есть две функции - А и В. Функция В просто выводит какую-то строку. А вот функция А принимает параметр, и этим параметром в Python может быть что угодно. Поэтому в теле функции А мы сначала проверяем, является ли параметр функцией (проверяем с помощью callable()), а потом уже решаем, что с этим делать. Если это функция, то мы выводим её на экран в двух видах:

f - как объект
f() - как результат выполнения функции

В первом случае будет просто выведено названия объекта. В нашем случае это функция и адрес этой функции.

Во втором случае будет выведен результат работы функции. И поскольку мы в функцию А передали функцию В, то будет выведен результат выполнения функции В.

Здесь вроде как всё просто. Правда, программа будем вести себя немного странно, если мы сделаем так:

A(B())

Ошибок не будет. Но вывод будет таким:

Функция B
Получили значение: None

Поскольку функция В будет выполнена до того, как она будет передана в функцию А, то надпись 'Функция B' всё равно будет выведена, но не внутри функции А, а при выполнении функции В в момент передачи в функцию А. Новичков это может немного смутить, потому что это, хотя и очевидно, но не очень понятно, так как мы всё внимание уделяем функции А и можем забыть про функцию В.

Ну а функция А выведет None, потому что функция В ничего не возвращает.

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.