首页 > 解决方案 > 在内联 if/else 语句中分配多个值

问题描述

我正在尝试编写一个内联 if/else 语句,该语句根据单个条件分配两个值。大意是:

x = y = 0
value = 11
threshold = 5

x, y = x+1, 0 if value <= threshold else x, y = x-1, value

我希望这段代码会导致x = -1and y = 11。当我运行这个时,我得到这个错误:SyntaxError: cannot assign to literal。我玩弄括号,但什么也做不了。

有没有办法做到这一点?我可以解决这个问题,但这会特别方便。

标签: pythonpython-3.x

解决方案


x, y =您需要括号,并且不需要后面的额外else内容:

>>> x = y = 0
>>> value = 11
>>> threshold = 5
>>>
>>> x, y = (x+1, 0) if value <= threshold else (x-1, value)
>>> x
-1
>>> y
11

请注意,如果没有括号,右侧有一个 3 元组:

>>> x,y = x-1, value if value <= threshold else x+1, 0
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: too many values to unpack (expected 2)

它被解析为: x+1, 0 if value <= threshold else x-1,value


推荐阅读