171

为什么这不起作用?

lambda: print "x"

这不是一个单一的陈述,还是别的什么?关于 lambda 中允许的内容,文档似乎有点稀疏......

4

9 回答 9

196

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
于 2010-06-04T01:08:56.460 回答
27

在我使用它进行简单的存根的情况下,我使用它:

fn = lambda x: sys.stdout.write(str(x) + "\n")

效果很好。

于 2011-05-25T13:24:09.653 回答
25

你写的相当于

def anon():
    return print "x"

这也会导致 SyntaxError,python 不允许您在 2.xx 中分配要打印的值;在python3中你可以说

lambda: print('hi')

它会起作用,因为他们已将 print 更改为函数而不是语句。

于 2010-06-04T01:03:44.330 回答
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
于 2010-06-04T01:06:56.620 回答
11

你可以做这样的事情。

创建一个函数将 print 语句转换为函数:

def printf(text):
   print text

并打印出来:

lambda: printf("Testing")
于 2014-04-14T17:05:39.100 回答
4

在 Python 3.x 中,print 可以在 lambda 中工作,而无需更改 lambda 的语义。

以特殊方式使用,这对于调试非常方便。我发布了这个“迟到的答案”,因为这是我经常使用的实用技巧。

假设您的“未检测” lambda 是:

lambda: 4

那么你的“仪表化” lambda 是:

lambda: (print (3), 4) [1]
于 2017-02-13T12:34:48.527 回答
3

lambda 的主体必须是单个表达式print是一个声明,所以不幸的是,它已经出来了。

于 2010-06-04T01:05:22.970 回答
2

在这里,您会看到问题的答案。 print它说,不是 Python 中的表达式。

于 2010-06-04T01:10:58.133 回答
1

在 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 bcond and a or b

于 2022-01-22T19:11:05.280 回答