我知道有些人不赞成,但我喜欢使用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
有人可以解释为什么我的第一个代码示例不起作用吗?并且,如果有一个,提供一个单行有条件地分配多个变量?
答案 0 :(得分:14)
它将其解析为三个值,即:
1,
2 if True else 0,
0
因此它变成三个值(1,2,0
),它超过表达式左侧的两个值。
尝试:
a,b = (1,2) if True else (0,0)
答案 1 :(得分:2)
这只是运营商优先权的问题。考虑:
>>> 1,2 if True else 0,0
(1, 2, 0)
根据需要添加括号,您将使其工作:
(1,2) if True else (0,0)