为什么 print 在 lambda 中不起作用?

发布于 2024-09-04 07:41:07 字数 118 浏览 5 评论 0原文

为什么这不起作用?

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(10

对岸观火 2024-09-11 07:41:07

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

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 [1324]: from __future__ import print_function

In [1325]: f = lambda x: print(x)

In [1326]: f("HI")
HI
苍暮颜 2024-09-11 07:41:07

如果我使用它进行简单的存根,我会使用它:

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

它工作得很好。

In cases where I am using this for simple stubbing out I use this:

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

which works perfectly.

陪你到最终 2024-09-11 07:41:07

你所写的相当于

def anon():
    return print "x"

这也会导致语法错误,python 不允许你在 2.xx 中分配一个值来打印;在 python3 中,你可以说它

lambda: print('hi')

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

what you've written is equivalent to

def anon():
    return print "x"

which also results in a SyntaxError, python doesn't let you assign a value to print in 2.xx; in python3 you could say

lambda: print('hi')

and it would work because they've changed print to be a function instead of a statement.

吃兔兔 2024-09-11 07:41:07

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

The body of a lambda has to be an expression that returns a value. print, being a statement, doesn't return anything, not even None. Similarly, you can't assign the result of print to a variable:

>>> x = print "hello"
  File "<stdin>", line 1
    x = print "hello"
            ^
SyntaxError: invalid syntax

You also can't put a variable assignment in a lambda, since assignments are statements:

>>> lambda y: (x = y)
  File "<stdin>", line 1
    lambda y: (x = y)
                 ^
SyntaxError: invalid syntax
尘世孤行 2024-09-11 07:41:07

你可以做这样的事情。

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

def printf(text):
   print text

并打印它:

lambda: printf("Testing")

You can do something like this.

Create a function to transform print statement into a function:

def printf(text):
   print text

And print it:

lambda: printf("Testing")
计㈡愣 2024-09-11 07:41:07

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

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

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

lambda: 4

那么您的“已检测”lambda 为:

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

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:

lambda: 4

Then your 'instrumented' lambda is:

lambda: (print (3), 4) [1]
丑疤怪 2024-09-11 07:41:07

如果您想在 Python 3.x 中的 lambda func 中打印某些内容,您可以按如下方式执行:

my_func = lambda : print(my_message) or (any valid expression)

例如:

test = lambda x : print(x) or x**x

这有效,因为 Python 3.x 中的 print 是一个函数。

If you want to print something inside a lambda func In Python 3.x you can do it as following:

my_func = lambda : print(my_message) or (any valid expression)

For example:

test = lambda x : print(x) or x**x

This works because print in Python 3.x is a function.

那伤。 2024-09-11 07:41:07

lambda 的主体必须是单个表达式print 是一个语句,所以不幸的是它被淘汰了。

The body of a lambda has to be a single expression. print is a statement, so it's out, unfortunately.

伤感在游骋 2024-09-11 07:41:07

在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, so None or x code returns x
other way around:
lambda x: x or print("Message") would print message only if x is false-ish

this is widely used in lua, and in python you can too instead of a if cond else b write cond and a or b

孤独陪着我 2024-09-11 07:41:07

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

Here, you see an answer for your question. print is not expression in Python, it says.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文