Python是否有像C语言一样的逗号操作符?

7
在C语言(和C语言家族)中,表达式(4+7, 5+2)返回7。但是在Python中,相同的表达式将得到一个元组(11, 7)
那么Python是否有像C一样的逗号运算符呢?

5
不,但真正的问题是为什么你想要一个。 - Winston Ewert
3
美丽胜于丑陋。 疏而不密胜于密而不疏。 可读性至关重要。 - o0'.
1
如果Python有那个无用的逗号运算符,那我就不相信Python还是可读的了。 - user142019
3个回答

10
你应该使用类似以下的内容来替换它:
comma_operated = (4+7, 5+2)[-1]

但如评论中所正确指出的,你为什么要这样做呢?它在C或C++中很少使用,而且有充分的原因。


3
实际上,调试列表推导式很有用:你可以在推导式中加入打印语句,以便观察推导式的执行情况。 - hl037_
1
我正在使用它来插入临时的调试输出语句,而不需要进行重大改写。 - Technophile
人们需要它并不奇怪。有些地方只允许使用表达式(与语句相对),例如列表推导式、断言语句等,这将允许在表达式中评估任意表达式。还有一种方法verify(),在出现错误时抛出异常,运行具有副作用的方法等。 - amka66

4
据我所知,不行。不过你可以通过使用两行来模拟这个效果。:-)
x = (call_one(), call_two())

# is almost the same as

call_one()
x = call_two()

# or
x = (call_one(), call_two())[1]

不,你不能这样做。请查看我对@KillianDS答案的评论(“人们需要它并不令人惊讶”)。 - amka66

2

这个问题有了新的更新。

目前接受的答案不完整,因为它不允许在这种情况下使用赋值表达式(例如,(a = 1, a+2)[-1]会生成错误)。

Python 3.8现在推出了赋值表达式,理论上应该可以实现这一点,即:

( a := 1, a + 2)[-1]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接