2015-07-04 3 views
-1

У меня возникли трудности с пониманием синтаксиса лямбда-функции в python. В частности, я не понимаю, почему следующий код не должен работать:Функция Lambda возвращает имя функции вместо значения в Python

def f(x): 
    return lambda x:x**2 

f(2) 

Выходной сигнал, что я ожидаю 4, но фактический результат выглядит следующим образом:

<function __main__.<lambda>> 

Что происходит ? Заранее спасибо

+0

Это функция, которая возвращает функцию. Поэтому вам нужно вызвать то, что возвращается 'f (2)'. Если вы ищете currying, используйте functools.partial. –

ответ

5

Вам необходимо вызвать лямбда с помощью ():

In [1]: def f(x): 
    ...:  return (lambda n:n**2)(x) 
    ...: 

In [2]: f(3) 
Out[2]: 9 

Или назначьте лямбда к вар:

In [3]: f=lambda x:x**2 

In [4]: f(4) 
Out[4]: 16 
1

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

В вашем случае -

f(2)(2) 
>>> 4 

Если вы просто хотите, е, чтобы обратиться к лямбда-функции, то сделать -

f = lambda x:x**2 
f(2) 
>>>> 4 

Не вернуть его из функции.

0

Вы делаете это неправильно.
Функция f возвращает функцию lambda, которую необходимо вызвать.
Итак, чтобы сделать его работу -

>>> f(0)(2) 
    ^This can be anything 
4 

Попробуйте что-то вроде этого -

>>> f = lambda x:x**2 
>>> f(2) 
4 
2

f(2) возвращает лямбда. Вот что такое <function __main__.<lambda>>. Обратите внимание, что x внутри области лямбда не совпадает с x, который передается как аргумент f. Таким образом, вы могли бы определить свою функцию без аргументов, и она будет иметь тот же результат.

Чтобы позвонить лямбда, вы можете сделать f()(2).

Смежные вопросы