Чому це не працює?
lambda: print "x"
Це не одне твердження чи це щось інше? Документація здається трохи рідкою щодо того, що дозволено в лямбда ...
Чому це не працює?
lambda: print "x"
Це не одне твердження чи це щось інше? Документація здається трохи рідкою щодо того, що дозволено в лямбда ...
Відповіді:
А lambda
тіло «S має бути один вислів . У Python 2.x, print
це твердження. Однак у Python 3 print
є функцією (а додаток функції - це вираз, тому він працюватиме в лямбда). Ви можете (і повинні, для сумісності вперед) використовувати функцію друку, що переноситься назад, якщо ви використовуєте останню версію Python 2.x:
In [1324]: from __future__ import print_function
In [1325]: f = lambda x: print(x)
In [1326]: f("HI")
HI
from __future__ import print_function
повинно бути на початку коду? thx
print()
вбудований метод.
У випадках, коли я використовую це для простого заглушки, я використовую це:
fn = lambda x: sys.stdout.write(str(x) + "\n")
що працює чудово.
те, що ви написали, еквівалентно
def anon():
return print "x"
що також призводить до SyntaxError, python не дозволяє призначити значення для друку в 2.xx; у python3 можна сказати
lambda: print('hi')
і це буде працювати, тому що вони змінили друк на функцію замість заяви.
from __future__ import print_function
, що дозволяє це в py2.x
lambda: sys.stdout.write('hi')
Тіло лямбда має бути виразом, який повертає значення. 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
Можна зробити щось подібне.
Створіть функцію для перетворення оператора друку у функцію:
def printf(text):
print text
І роздрукуйте:
lambda: printf("Testing")
def printf(fmt, *args): print(fmt % args)
З Python 3.x друк CAN може працювати в лямбда, не змінюючи семантики лямбда.
Використовується спеціальним чином, це дуже зручно для налагодження. Я публікую цю "пізню відповідь", тому що я часто використовую практичну хитрість.
Припустимо, ваша "неінструментована" лямбда:
lambda: 4
Тоді ваша "інструментальна" лямбда:
lambda: (print (3), 4) [1]