为什么这不起作用?
lambda: print "x"
这不是一个单一的陈述,还是别的什么?关于lambda中允许的内容,文档似乎有点稀疏......
使用Python 3.x,打印CAN可以在lambda中工作,而无需更改lambda的语义 .
以特殊方式使用,这对于调试非常方便 . 我发布这个'迟到的答案',因为这是我经常使用的实用技巧 .
假设你的'uninstrumented'lambda是:
lambda: 4
然后你的'仪表'lambda是:
lambda: (print (3), 4) [1]
lambda 的身体必须是单一的表达 . 在Python 2.x中, print 是一个语句 . 但是,在Python 3中, print 是一个函数(函数应用程序是一个表达式,因此它将在lambda中工作) . 如果您使用的是最新的Python 2.x,则可以(并且应该为了向前兼容性:)使用后端打印功能:
lambda
print
In [1324]: from __future__ import print_function In [1325]: f = lambda x: print(x) In [1326]: f("HI") HI
你写的东西相当于
def anon(): return print "x"
这也导致了一个SyntaxError,python不允许你在2.xx中分配一个打印值;你可以说在python3中
lambda: print('hi')
它会工作,因为他们已经将print更改为函数而不是语句 .
lambda的主体必须是单个表达式 . print 是一个声明,不幸的是它已经出局了 .
如果我使用它来进行简单的删除,我会使用:
fn = lambda x: sys.stdout.write(str(x) + "\n")
这很完美 .
Here,您看到了问题的答案 . 它说 print 不是Python中的表达式 .
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
你可以做这样的事情 .
Create a function to transform print statement into a function:
def printf(text): print text
And print it:
lambda: printf("Testing")
8 回答
使用Python 3.x,打印CAN可以在lambda中工作,而无需更改lambda的语义 .
以特殊方式使用,这对于调试非常方便 . 我发布这个'迟到的答案',因为这是我经常使用的实用技巧 .
假设你的'uninstrumented'lambda是:
然后你的'仪表'lambda是:
lambda
的身体必须是单一的表达 . 在Python 2.x中,print
是一个语句 . 但是,在Python 3中,print
是一个函数(函数应用程序是一个表达式,因此它将在lambda中工作) . 如果您使用的是最新的Python 2.x,则可以(并且应该为了向前兼容性:)使用后端打印功能:你写的东西相当于
这也导致了一个SyntaxError,python不允许你在2.xx中分配一个打印值;你可以说在python3中
它会工作,因为他们已经将print更改为函数而不是语句 .
lambda的主体必须是单个表达式 .
print
是一个声明,不幸的是它已经出局了 .如果我使用它来进行简单的删除,我会使用:
这很完美 .
Here,您看到了问题的答案 . 它说
print
不是Python中的表达式 .lambda的主体必须是一个返回值的表达式 .
print
,作为一种陈述,不会返回任何东西,甚至不会返回None
. 同样,您不能将print
的结果赋给变量:您也不能在lambda中放置变量赋值,因为赋值是语句:
你可以做这样的事情 .
Create a function to transform print statement into a function:
And print it: