为什么这不起作用?
lambda: print "x"
这不是一个单一的陈述,还是别的什么? 关于lambda中允许的内容,文档似乎有点稀疏......
答案 0 :(得分:176)
lambda
的正文必须是单个表达式。在Python 2.x中,print
是一个语句。但是,在Python 3中,print
是函数(函数应用程序是一个表达式,因此它将在lambda中工作)。如果您使用的是最新的Python 2.x,您可以(并且应该为了向前兼容性:)使用后端打印功能:
In [1324]: from __future__ import print_function
In [1325]: f = lambda x: print(x)
In [1326]: f("HI")
HI
答案 1 :(得分:24)
你所写的内容相当于
def anon():
return print "x"
这也导致了一个SyntaxError,python不允许你在2.xx中分配一个打印值;在python3中你可以说
lambda: print('hi')
它会起作用,因为他们已经将print更改为函数而不是语句。
答案 2 :(得分:24)
如果我使用它来进行简单的剔除,我会使用它:
fn = lambda x: sys.stdout.write(str(x) + "\n")
完美无缺。
答案 3 :(得分:11)
lambda的主体必须是一个返回值的表达式。作为陈述的print
不会返回任何内容,甚至不会返回None
。同样,您无法将print
的结果分配给变量:
>>> x = print "hello"
File "<stdin>", line 1
x = print "hello"
^
SyntaxError: invalid syntax
您也不能在lambda中放置变量赋值,因为赋值是语句:
>>> lambda y: (x = y)
File "<stdin>", line 1
lambda y: (x = y)
^
SyntaxError: invalid syntax
答案 4 :(得分:11)
你可以这样做。
创建一个将print语句转换为函数的函数:
def printf(text):
print text
打印出来:
lambda: printf("Testing")
答案 5 :(得分:3)
lambda的主体必须是单个表达式。 print
是一个声明,不幸的是它已经发布了。
答案 6 :(得分:3)
使用Python 3.x,打印CAN工作在lambda中,而不改变lambda的语义。
以特殊方式使用,这对于调试非常方便。 我发布了这个“迟到的回答”,因为这是我经常使用的一个实用技巧。
假设你的'uninstrumented'lambda是:
lambda: 4
然后你的'仪表'lambda是:
lambda: (print (3), 4) [1]
答案 7 :(得分:2)
Here,您会看到问题的答案。它说print
不是Python中的表达式。