что это делает в python? x = функция(аргументы)(переменная)

#python #python-3.x #function #arguments

Вопрос:

Я видел некоторые программы, в которых используется приведенный ниже формат.

 x = function(arguments)(variable)
 

Я искал в Интернете, но не знал, как это называется, и, следовательно, не смог найти ничего, связанного с этим.
Я хочу знать, как называется этот формат и как он работает.

Комментарии:

1. Это не формат . Функции являются первоклассными объектами в Python, поэтому вызов функции может возвращать другую функцию. В вашем примере вызов function(arguments) возвращает функцию. Давайте предположим, что функция, которую он возвращает, такова math.sqrt() . Код вычисляет math.sqrt(variable) и присваивает результат x .

2. В этом нет ничего особенного. Мы можем предположить, что function(arguments) возвращает некоторый вызываемый объект , вероятно, другую функцию (или, возможно, класс), которая затем немедленно вызывается , function(arguments)(variable) — > some_callable(variable)

Ответ №1:

В python следует помнить, что все является объектом, даже функции. Это означает, что функции могут быть назначены именам переменных и даже могут быть возвращены из других функций. Это то, что делается в вашем коде. Поскольку на самом деле вызываются две функции, давайте переименуем их в foo и bar . Затем ваш вызов функции:

 x = foo(arguments)(variable)
 

Определение функции foo похоже на

 def foo(arguments):
    def bar(variable):
        return (something with arguments and variable)
    return bar
 

Таким образом, функция foo возвращает панель функций, которая при вызове возвращает результат.

Это полезно, например, при создании декораторов.

Комментарии:

1. bar Функцию не нужно определять внутри foo , не так ли?

2. @MuhdMairaj нет. Здесь важно понять, что функции ведут себя не иначе, чем что-либо другое.