#python
#python
Вопрос:
Я столкнулся с этой логикой:
def f2(f):
def g(arg):
return 2 * f(arg)
return g
def f1(arg):
return arg 1
f_2 = f2(f1)
print f_2(3)
На первый взгляд может показаться, что это очень простой код.
Но требуется некоторое время, чтобы выяснить, что здесь происходит.
Отправка функции в качестве аргумента другой функции для меня необычна.
Пока это работает, я задаюсь вопросом, следует ли избегать подобной техники (поскольку поначалу она кажется довольно запутанной).
Комментарии:
1. В основном так работают декораторы.
2. Это довольно распространено в языках, которые рассматривают функции как объекты первого класса — на ум приходит Javascript
3. это также известно как декоратор в python … очень распространенная практика
4. В чем именно здесь вопрос?
Ответ №1:
Передача функций другим функциям является распространенной идиомой в так называемых функциональных языках программирования, таких как LISP, Scheme, Haskell и т.д. Python иногда называют «многопарадигмальным языком», потому что он обладает некоторыми особенностями функциональных языков (а также императивных / структурированных и объектно-ориентированных языков).
Таким образом, хотя это считается продвинутой техникой, вряд ли ее можно увидеть в Python. В Python даже есть ключевое слово language ( lambda
), позволяющее определять короткие анонимные функции «в строке» при вызове функции, поэтому вам не нужно давать им имя и определять их в другом месте. Он также имеет встроенные функции, такие как map
, filter
и reduce
, которые явно предназначены для работы с переданными им функциями; они заимствованы из вышеупомянутых функциональных языков. И часто используемая языковая функция, декораторы, в основном является функцией, которая принимает функцию и возвращает функцию.