为什么打印机不能在 Lambda 上工作?

为什么这个不管用?

lambda: print "x"

这不是一个单一的声明,还是别的什么? 文档似乎有点少,什么是允许在一个 lambda..。

99437 次浏览

你写的东西相当于

def anon():
return print "x"

这也会导致 SyntaxError,python 不允许你在2中指定一个值来打印。在 python3中,你可以说

lambda: print('hi')

因为他们把 print 改成了函数而不是语句。

一个 lambda 的主体必须是一个单一的 表情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

lambda的身体必须是 单一表达式。在 Python 2.x 中,print是一条语句。但是,在 Python3中,print功能(函数应用程序是表达式,因此它将在 lambda 中工作)。如果您正在使用最新的 Python2,那么您可以(并且应该)使用后端移植的 print 函数来实现向前兼容性。谢谢:

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

函数不返回任何值,因此 None or x代码返回 x 反过来说: < br > lambda x: x or print("Message")只会在 x 为 false-ish

时打印消息

这是广泛使用的 lua,并在 Python 中你也可以代替 a if cond else bcond 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 是一个函数。