Почему это не работает?
lambda: print "x"
Этот ни один оператор не или является этим что-то еще? Документация кажется немного редкой на том, что позволяется в лямбде...
Тело лямбды
должно быть единственным выражением. В Python 2.x print
является выражением. Однако в Python 3 print
- это функция (а применение функции - это выражение, поэтому она будет работать в лямбде). Вы можете (и должны, для совместимости :) использовать обратно экспортированную функцию print, если вы используете последнюю версию Python 2.x:
In [1324]: from __future__ import print_function
In [1325]: f = lambda x: print(x)
In [1326]: f("HI")
HI
Тело лямбды должно быть одним выражением. print
- это выражение, поэтому, к сожалению, оно исключено.
то, что вы написали, эквивалентно
def anon():
return print "x"
что также приводит к SyntaxError, python не позволяет присваивать значение print в версии 2.xx; в python3 вы можете сказать
lambda: print('hi')
и это будет работать, потому что они изменили print, чтобы быть функцией вместо оператора.
Тело лямбды должно быть выражением, которое возвращает значение. print
, будучи оператором, не возвращает ничего, даже None
. Аналогично, вы не можете присвоить результат print
переменной:
>>> x = print "hello"
File "<stdin>", line 1
x = print "hello"
^
SyntaxError: invalid syntax
Вы также не можете поместить присвоение переменной в лямбду, так как присвоения являются операторами:
>>> lambda y: (x = y)
File "<stdin>", line 1
lambda y: (x = y)
^
SyntaxError: invalid syntax
Здесь вы видите ответ на свой вопрос. print
не является выражением в Python, там написано.