为什么不打印lambda?

时间:2010-06-04 00:58:27

标签: python printing lambda python-2.x

为什么这不起作用?

lambda: print "x"

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

8 个答案:

答案 0 :(得分:176)

lambda的正文必须是单个表达式。在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

答案 1 :(得分:24)

你所写的内容相当于

def anon():
    return print "x"

这也导致了一个SyntaxError,python不允许你在2.xx中分配一个打印值;在python3中你可以说

lambda: print('hi')

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

答案 2 :(得分:24)

如果我使用它来进行简单的剔除,我会使用它:

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

完美无缺。

答案 3 :(得分: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

答案 4 :(得分:11)

你可以这样做。

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

def printf(text):
   print text

打印出来:

lambda: printf("Testing")

答案 5 :(得分:3)

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

答案 6 :(得分:3)

使用Python 3.x,打印CAN工作在lambda中,而不改变lambda的语义。

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

假设你的'uninstrumented'lambda是:

lambda: 4

然后你的'仪表'lambda是:

lambda: (print (3), 4) [1]

答案 7 :(得分:2)

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