Подтвердить что ты не робот

Python: пропустить выражение в форме лямбда

Вопрос с новичком в Python, почему этот синтаксис недействителен: lambda: pass, а это: def f(): pass правильно?

Спасибо за понимание.

4b9b3361

Ответ 1

Это ошибка, потому что после двоеточия вам нужно поставить возвращаемое значение, поэтому:

lambda: pass

равно:

def f():
   return pass

что действительно не имеет смысла и создает также SyntaxError.

Ответ 2

lambdas может содержать только выражения - в основном, что-то, что может появиться в правой части оператора присваивания. pass не является выражением - он не оценивает значение, а a = pass никогда не является законным.

Другим способом думать об этом является то, что лямбды неявно возвращают результат своего тела, lambda: pass фактически эквивалентен:

def f():
    return pass

Это не имеет смысла. Если вам действительно нужна no-op лямбда по какой-то причине, сделайте lambda: None.

Ответ 3

Возвращаемое значение функции без оператора return составляет None. Вы можете видеть это из простой функции pass, которая определена в OP:

>>> def f():
...     pass
... 
>>> print f()
None

Если вы ищете функцию лямбда, которая эквивалентна этой функции "no-op", вы можете использовать:

lambda: None

Например:

>>> f = lambda: None
>>> print f()
None