为什么这个不管用?
lambda: print "x"
这不是一个单一的声明,还是别的什么? 文档似乎有点少,什么是允许在一个 lambda..。
你写的东西相当于
def anon(): return print "x"
这也会导致 SyntaxError,python 不允许你在2中指定一个值来打印。在 python3中,你可以说
lambda: print('hi')
因为他们把 print 改成了函数而不是语句。
一个 lambda 的主体必须是一个单一的 表情。 print是一个语句,所以它出来了,不幸的是。
print
Lambda 的主体必须是返回值的表达式。print作为一个语句,不返回任何内容,甚至 None也不返回。类似地,您不能将 print的结果赋给一个变量:
None
>>> 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
lambda的身体必须是 单一表达式。在 Python 2.x 中,print是一条语句。但是,在 Python3中,print是 功能(函数应用程序是表达式,因此它将在 lambda 中工作)。如果您正在使用最新的 Python2,那么您可以(并且应该)使用后端移植的 print 函数来实现向前兼容性。谢谢:
lambda
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")
效果非常好。
你可以这么做。
创建一个将 print 语句转换为函数的函数:
def printf(text): print text
打印出来:
lambda: printf("Testing")
使用 Python 3.x,print CAN 在 lambda 中工作,而不改变 lambda 的语义。
以一种特殊的方式使用,这对于调试非常方便。 我发布这个“迟到的回答”,因为这是我经常使用的一个实用技巧。
假设您的“无仪器”lambda 是:
lambda: 4
那么你的“仪器化”的 Lambda 是:
lambda: (print (3), 4) [1]
在 python3中,print 是一个函数,你可以像 Jacques de Hooge 建议的那样打印并返回一些东西,但是我喜欢其他的方法: lambda x: print("Message") or x
lambda x: print("Message") or x
函数不返回任何值,因此 None or x代码返回 x 反过来说: < br > lambda x: x or print("Message")只会在 x 为 false-ish
None or x
x
lambda x: x or print("Message")
这是广泛使用的 lua,并在 Python 中你也可以代替 a if cond else b写 cond and a or b
a if cond else b
cond and a or b
如果你想在一个 lambda func 中打印一些东西,在 Python 3. x 中你可以这样做:
my_func = lambda : print(my_message) or (any valid expression)
例如:
test = lambda x : print(x) or x**x
这是因为在 Python 3.x 中 print 是一个函数。