我正在尝试应用一行if else语句,但是使用条件来确定要应用赋值的变量。这可能吗?
这个例子显然是不正确的,但希望有助于了解我想要做的事情:
a = 4
var1 = a if a == 4 else var2 = a
答案 0 :(得分:9)
您可以编写正常的if
语句
if a == 4:
var1 = a
else:
var2 = a
python三元运算符不适用于赋值。
答案 1 :(得分:5)
with tuple unpacking:
var1, var2 = (a, var2) if a == 4 else (var1, a)
编辑:我回答了这个有趣的事情,但很好的答案是梅尔(常规)(
答案 2 :(得分:3)
听起来像一个XY问题。如果var1
和var2
可以包含相同的内容,则可以将它们存储在list
个变量中。在这种情况下,使用测试结果来计算索引:
a = 4
vars = [0,0]
vars[a==4] = a
>>> vars
[0, 4]
答案 3 :(得分:1)
你问的是可以在python中使用globals字典。即使定义了var1
也var2
。
e.g:
globals()['var1' if a == 4 else 'var2'] = a
但是,我不认为这是一个好习惯,如果你需要在代码中访问var1
或var2
,那么其中一个会导致错误
例如给出代码
a = 0
if a == 4:
var1 = a
else:
var2 = a
print("var1={}, var2={}".format(var1, var2))
会导致:
NameError: name 'var1' is not defined
为避免这种情况,最好事先定义变量。
a = 0
var1 = None
var2 = None
if a == 4:
var1 = a
else:
var2 = a
如果你喜欢单行,你可以有2个单行:
var1 = a if a == 4 else None
var2 = a if a !=4 else None
答案 4 :(得分:0)
它可怕,不应该做,但应该工作。
var1, var2 = [var1,a][a==4], [b,var2][a==4]
答案 5 :(得分:0)
https://repl.it/repls/ExcellentCreepyDonateware
a = 4
var1=0
var2=0
(var1,var2) = (a,var2) if a == 4 else (var1,a)
print (var1,var2)