Any*_*orn 154 python printing lambda python-2.x
为什么这不起作用?
lambda: print "x"
Run Code Online (Sandbox Code Playgroud)
这不是一个单一的陈述,还是别的什么?关于lambda中允许的内容,文档似乎有点稀疏......
L̲̳*_*̲̳̳ 181
一个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
Run Code Online (Sandbox Code Playgroud)
Dan*_*ple 26
如果我使用它来进行简单的剔除,我会使用:
fn = lambda x: sys.stdout.write(str(x) + "\n")
Run Code Online (Sandbox Code Playgroud)
哪作得很好.
dag*_*oof 24
你所写的相当于
def anon():
return print "x"
Run Code Online (Sandbox Code Playgroud)
这也导致了一个SyntaxError,python不允许你在2.xx中分配一个打印值; 你可以说在python3中
lambda: print('hi')
Run Code Online (Sandbox Code Playgroud)
它会工作,因为他们已经将print更改为函数而不是语句.
Pau*_*icz 11
lambda的主体必须是一个返回值的表达式. print作为一种陈述,不会返回任何东西,甚至不会None.同样,您无法将结果分配给print变量:
>>> x = print "hello"
File "<stdin>", line 1
x = print "hello"
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
您也不能在lambda中放置变量赋值,因为赋值是语句:
>>> lambda y: (x = y)
File "<stdin>", line 1
lambda y: (x = y)
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
Vic*_*ins 11
你可以做这样的事情.
创建一个将print语句转换为函数的函数:
def printf(text):
print text
Run Code Online (Sandbox Code Playgroud)
并打印出来:
lambda: printf("Testing")
Run Code Online (Sandbox Code Playgroud)
在 Python 3.x 中, print 可以在 lambda 中工作,而无需更改 lambda 的语义。
以特殊方式使用,这对于调试非常方便。我发布这个“迟到的答案”,因为这是我经常使用的实用技巧。
假设你的“未检测”的 lambda 是:
lambda: 4
Run Code Online (Sandbox Code Playgroud)
那么你的“仪表化”lambda 是:
lambda: (print (3), 4) [1]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
67407 次 |
| 最近记录: |