12

我知道有些人不喜欢它,但我喜欢使用 Python 的三元运算符,因为它使简单的if/else语句更易于阅读(我认为)。无论如何,我发现我不能这样做:

>>> a,b = 1,2 if True else 0,0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack

我认为三元运算符的工作方式是它基本上构建了以下内容:

if True:
  a,b = 1,2
else:
  a,b = 0,0

有人可以解释为什么我的第一个代码示例不起作用吗?而且,如果有的话,提供一个单行来有条件地分配多个变量?

4

2 回答 2

23

它将其解析为三个值,它们是:

1,
2 if True else 0,
0

因此它变成了三个值 ( 1,2,0),比表达式左侧的两个值多。

尝试:

a,b = (1,2) if True else (0,0)
于 2013-07-12T19:45:07.163 回答
2

这只是运算符优先级的问题。考虑:

>>> 1,2 if True else 0,0
(1, 2, 0)

根据需要添加括号,您将使其工作:

(1,2) if True else (0,0)
于 2013-07-12T19:45:39.313 回答