为什么这不起作用?
lambda: print "x"
这不是一个单一的陈述,还是别的什么?关于 lambda 中允许的内容,文档似乎有点稀疏......
为什么这不起作用?
lambda: print "x"
这不是一个单一的陈述,还是别的什么?关于 lambda 中允许的内容,文档似乎有点稀疏......
Alambda
的主体必须是一个表达式。在 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
在我使用它进行简单的存根的情况下,我使用它:
fn = lambda x: sys.stdout.write(str(x) + "\n")
效果很好。
你写的相当于
def anon():
return print "x"
这也会导致 SyntaxError,python 不允许您在 2.xx 中分配要打印的值;在python3中你可以说
lambda: print('hi')
它会起作用,因为他们已将 print 更改为函数而不是语句。
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
你可以做这样的事情。
创建一个函数将 print 语句转换为函数:
def printf(text):
print text
并打印出来:
lambda: printf("Testing")
在 Python 3.x 中,print 可以在 lambda 中工作,而无需更改 lambda 的语义。
以特殊方式使用,这对于调试非常方便。我发布了这个“迟到的答案”,因为这是我经常使用的实用技巧。
假设您的“未检测” lambda 是:
lambda: 4
那么你的“仪表化” lambda 是:
lambda: (print (3), 4) [1]
lambda 的主体必须是单个表达式。print
是一个声明,所以不幸的是,它已经出来了。
在这里,您会看到问题的答案。 print
它说,不是 Python 中的表达式。
在 python3 中,print 是一个函数,您可以按照 Jacques de Hooge 的建议打印并返回一些内容,但我喜欢其他方法:lambda x: print("Message") or x
print
函数不返回任何内容,因此None or x
代码以x
其他方式返回:
lambda x: x or print("Message")
仅当 x 为假时才会打印消息
这在lua中被广泛使用,在python中你也可以代替a if cond else b
写cond and a or b