为什么 print 在 lambda 中不起作用?
为什么这不起作用?
lambda: print "x"
这不是一个单独的说法,还是别的什么? 该文档似乎对 lambda 中允许的内容有点稀疏......
Why doesn't this work?
lambda: print "x"
Is this not a single statement, or is it something else?
The documentation seems a little sparse on what is allowed in a lambda...
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
lambda
的主体必须是单个表达式。在 Python 2.x 中,print
是一条语句。然而,在 Python 3 中,print
是一个函数(函数应用程序是一个表达式,因此它可以在 lambda 中工作)。如果您使用的是最新的 Python 2.x,您可以(并且应该,为了向前兼容:)使用向后移植的打印函数:A
lambda
's body has to be a single expression. In Python 2.x,print
is a statement. However, in Python 3,print
is a function (and a function application is an expression, so it will work in a lambda). You can (and should, for forward compatibility :) use the back-ported print function if you are using the latest Python 2.x:如果我使用它进行简单的存根,我会使用它:
它工作得很好。
In cases where I am using this for simple stubbing out I use this:
which works perfectly.
你所写的相当于
这也会导致语法错误,python 不允许你在 2.xx 中分配一个值来打印;在 python3 中,你可以说它
会起作用,因为他们将 print 更改为函数而不是语句。
what you've written is equivalent to
which also results in a SyntaxError, python doesn't let you assign a value to print in 2.xx; in python3 you could say
and it would work because they've changed print to be a function instead of a statement.
lambda 的主体必须是返回值的表达式。
print
作为一条语句,不会返回任何内容,甚至None
也不返回。同样,您不能将print
的结果分配给变量:您也不能将变量赋值放入 lambda 中,因为赋值是语句:
The body of a lambda has to be an expression that returns a value.
print
, being a statement, doesn't return anything, not evenNone
. Similarly, you can't assign the result ofprint
to a variable:You also can't put a variable assignment in a lambda, since assignments are statements:
你可以做这样的事情。
创建一个函数,将 print 语句转换为函数:
并打印它:
You can do something like this.
Create a function to transform print statement into a function:
And print it:
在 Python 3.x 中, print 可以在 lambda 中工作,而无需更改 lambda 的语义。
以特殊方式使用,这对于调试非常方便。
我发布这个“迟到的答案”,因为这是我经常使用的实用技巧。
假设您的“未检测”lambda 为:
那么您的“已检测”lambda 为:
With Python 3.x, print CAN work in a lambda, without changing the semantics of the lambda.
Used in a special way this is very handy for debugging.
I post this 'late answer', because it's a practical trick that I often use.
Suppose your 'uninstrumented' lambda is:
Then your 'instrumented' lambda is:
如果您想在 Python 3.x 中的 lambda func 中打印某些内容,您可以按如下方式执行:
例如:
这有效,因为 Python 3.x 中的 print 是一个函数。
If you want to print something inside a lambda func In Python 3.x you can do it as following:
For example:
This works because print in Python 3.x is a function.
lambda 的主体必须是单个表达式。
print
是一个语句,所以不幸的是它被淘汰了。The body of a lambda has to be a single expression.
print
is a statement, so it's out, unfortunately.在python3中, print 是一个函数,您可以按照 Jacques de Hooge 的建议打印并返回一些内容,但我喜欢其他方法: lambda x: print("Message") 或 x
print 函数不返回任何内容,因此
None 或 x
代码返回x
另一种方式:
lambda x: x 或 print("Message")
仅当 x 为 false 时才会打印消息,这在 lua 中广泛使用,在 python 中你也可以代替
a if cond else b
写入cond 和 a 或 b
in python3 print is a function, and you can print and return something as Jacques de Hooge suggests, but i like other approach:
lambda x: print("Message") or x
print
function returns nothing, soNone or x
code returnsx
other way around:
lambda x: x or print("Message")
would print message only if x is false-ishthis is widely used in lua, and in python you can too instead of
a if cond else b
writecond and a or b
在这里,您可以看到问题的答案。它说
print
不是 Python 中的表达式。Here, you see an answer for your question.
print
is not expression in Python, it says.