Вопрос с новичком в Python, почему этот синтаксис недействителен: lambda: pass, а это: def f(): pass правильно?
Спасибо за понимание.
Ответ 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", вы можете использовать: