Ответ 1
Это ошибка, потому что после двоеточия вам нужно поставить возвращаемое значение, поэтому:
lambda: pass
равно:
def f():
return pass
что действительно не имеет смысла и создает также SyntaxError
.
Вопрос с новичком в Python, почему этот синтаксис недействителен: lambda: pass
, а это: def f(): pass
правильно?
Спасибо за понимание.
Это ошибка, потому что после двоеточия вам нужно поставить возвращаемое значение, поэтому:
lambda: pass
равно:
def f():
return pass
что действительно не имеет смысла и создает также SyntaxError
.
lambdas может содержать только выражения - в основном, что-то, что может появиться в правой части оператора присваивания. pass
не является выражением - он не оценивает значение, а a = pass
никогда не является законным.
Другим способом думать об этом является то, что лямбды неявно возвращают результат своего тела, lambda: pass
фактически эквивалентен:
def f():
return pass
Это не имеет смысла. Если вам действительно нужна no-op лямбда по какой-то причине, сделайте lambda: None
.
Возвращаемое значение функции без оператора return
составляет None
. Вы можете видеть это из простой функции pass
, которая определена в OP:
>>> def f():
... pass
...
>>> print f()
None
Если вы ищете функцию лямбда, которая эквивалентна этой функции "no-op", вы можете использовать:
lambda: None
Например:
>>> f = lambda: None
>>> print f()
None