2014-10-24 2 views
1

lambda xxx: foo(xxx) - это абсолютно то же самое, что только foo? используется в строительстве как map(lambda xxx: foo(xxx), my_things)Python лямбда - это необходимо в таком случае?

Я не вижу никакой разницы:

def plus(a): 
    return a+1 
for i in map(plus, [1,2,3]): 
    print(i) 
for i in map(lambda a: plus(a), [1,2,3]): 
    print(i) 

печатает тот же

2 
3 
4 

ответ

2

Да, это верно. lambda x: foo(x) - это то же самое, что и звонок foo(x).

Помните, что lambda является всего лишь анонимной функцией, которая что-то делает с x. В этом случае он просто вызывает foo на x и возвращает результат foo(x).

Например, вызов (lambda x: foo(x), 60) подобен сделать это:

def function2(y): 
    return y*2 

def function1(x): 
    return function2(x) 

function1(60) 
4

Нет, lambda x: foo(x) не то же самое, как foo(x), а скорее foo. Восстановление eta представляет собой преобразование lambda x: foo(x) в foo.

map(lambda a: plus(a), [1,2,3]) и map(plus, [1,2,3]) связаны заменой lambda a: plus(a) на plus применение правила сокращения эта.

+0

Да, это правильно о 'foo' not' foo (x) ', это изящно, что я имел в виду, я отредактирую свой вопрос, спасибо – scythargon

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