Почему печать не работает в лямбде?
почему это не работает?
lambda: print "x"
Это не одно утверждение, или это что-то другое? Документация кажется немного скудной на то, что разрешено в лямбде...
8 ответов:
A
lambda
тело должно быть одно выражение. В Python 2.x,In [1324]: from __future__ import print_function In [1325]: f = lambda x: print(x) In [1326]: f("HI") HI
то, что вы написали эквивалентно
def anon(): return print "x"
что также приводит к SyntaxError, python не позволяет назначить значение для печати в 2.xx; в python3 вы могли бы сказать
lambda: print('hi')
и это будет работать, потому что они изменили печать должна быть функция, а не оператор.
в случаях, когда я использую это для простого тушения я использую это:
fn = lambda x: sys.stdout.write(str(x) + "\n")
который прекрасно работает.
тело лямбды должно быть выражением, которое возвращает значение.
None
. Аналогично, вы не можете назначить результат>>> 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
Вы можете сделать что-то подобное.
создайте функцию для преобразования оператора печати в функцию:
def printf(text): print text
и распечатать его:
lambda: printf("Testing")
здесь, вы увидите ответ на свой вопрос.
С Python 3.x, print может работать в лямбде, не изменяя семантику лямбды.
используется особым образом это очень удобно для отладки. Я публикую этот "поздний ответ", потому что это практический трюк, который я часто использую.
Предположим ваш 'неинструментальный' Lambda-это:
lambda: 4
тогда ваша "инструментированная" лямбда:
lambda: (print (3), 4) [1]