Python赋值给条件LHS

时间:2016-04-25 23:16:41

标签: python python-3.x

我知道

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

但这似乎也非常不恰当。

还有另一种我没想过的方式吗?

4 个答案:

答案 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)

如果ab有一些以前的值,您可以简单地写一下:

a, b = (a, val) if condition else (val, b)

否则你可以写

a, b = (None, val) if condition else (val, None)