Почему печать не работает в лямбде?

Почему это не работает?

lambda: print "x"

Этот ни один оператор не или является этим что-то еще? Документация кажется немного редкой на том, что позволяется в лямбде...

153
задан Augusta 1 November 2015 в 22:00
поделиться

5 ответов

Тело лямбды должно быть единственным выражением. В 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
180
ответ дан 23 November 2019 в 22:06
поделиться

Тело лямбды должно быть одним выражением. print - это выражение, поэтому, к сожалению, оно исключено.

3
ответ дан 23 November 2019 в 22:06
поделиться

то, что вы написали, эквивалентно

def anon():
    return print "x"

что также приводит к SyntaxError, python не позволяет присваивать значение print в версии 2.xx; в python3 вы можете сказать

lambda: print('hi')

и это будет работать, потому что они изменили print, чтобы быть функцией вместо оператора.

24
ответ дан 23 November 2019 в 22:06
поделиться

Тело лямбды должно быть выражением, которое возвращает значение. 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
11
ответ дан 23 November 2019 в 22:06
поделиться

Здесь вы видите ответ на свой вопрос. print не является выражением в Python, там написано.

2
ответ дан 23 November 2019 в 22:06
поделиться
Другие вопросы по тегам:

Похожие вопросы: