为什么不在lambda打印工作?
为什么这不工作?
lambda: print "x"
这不是一个单一的陈述,还是其他的东西? 文档似乎有点稀疏,什么是允许的lambda …
lambda
的身体必须是一个单一的expression 。 在Python 2.x中, print
是一个声明。 但是,在Python 3中, print
是一个函数 (函数应用程序是一个expression式,所以它可以在lambda中运行)。 如果您使用最新的Python 2.x,您可以(也应该为了向前兼容:)使用后端口打印function:
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')
它会工作,因为他们已经改变了印刷成为一个function,而不是一个声明。
在我使用这个简单残段的情况下,我使用这个:
fn = lambda x: sys.stdout.write(str(x) + "\n")
这完美的作品。
lambda的主体必须是返回值的expression式。 print
,作为一个声明,不返回任何东西,甚至None
。 同样,您不能将print
结果分配给一个variables:
>>> x = print "hello" File "<stdin>", line 1 x = print "hello" ^ SyntaxError: invalid syntax
你也不能在lambda中放置一个variables赋值,因为赋值是语句:
>>> lambda y: (x = y) File "<stdin>", line 1 lambda y: (x = y) ^ SyntaxError: invalid syntax
你可以做这样的事情。
创build一个将print语句转换为函数的函数:
def printf(text): print text
并打印出来:
lambda: printf("Testing")
拉姆达的身体必须是一个单一的expression 。 print
是一个声明,所以不幸的是,
在这里 ,你看到你的问题的答案。 print
不是Python中的expression式,它说。
使用Python 3.x,print CAN可以在lambda中工作,而不会改变lambda的语义。
以特殊的方式使用,这对于debugging非常方便。 我张贴这个“迟到的答案”,因为这是我经常使用的一个实用的技巧。
假设你的“uninstrumented”的lambda是:
lambda: 4
那么你的“仪器化”lambda是:
lambda: (print (3), 4) [1]