我知道
a = val1 if condition else val2
但是有办法做一些像
这样的事情a if condition else b = val
抛出一个SyntaxError
(我想这是可以理解的)
我会使用条件
if condition:
a = val
else:
b = val
但我讨厌在我的程序中使用相同的代码片段(这里是右侧)两次(在我的实际代码中,val
是一个非平凡的表达式)。我知道我可以制作一个虚拟变量来容纳那一块,但这似乎是不恰当的。
我也想到做一个元组
ba = (b,a)
ba[bool(condition)] = val
b, a = ba
但这似乎也非常不恰当。
还有另一种我没想过的方式吗?
答案 0 :(得分:1)
不,你不能这样做。创建另一个变量以保留val
并使用if
。简单就是好。
答案 1 :(得分:1)
可行在一行中有元组:
a,b = val if cond else a, val if not cond else b
但请不要使用它,它很丑陋,而且复杂得多if
。
答案 2 :(得分:1)
您可以使用函数封装逻辑并将其解压缩回您感兴趣的变量:
def decider(x, y, condition, val):
if condition:
return val, y
return x, val
a, b = decider(a, b, cond, value)
答案 3 :(得分:0)
如果a
和b
有一些以前的值,您可以简单地写一下:
a, b = (a, val) if condition else (val, b)
否则你可以写
a, b = (None, val) if condition else (val, None)