高效的if-elif用于更改多个变量

时间:2017-03-20 16:04:03

标签: python if-statement

我有几个变量,其中一些我需要在某种条件下改变。

test = 'foo'
a, b, c = None, None, None
if test == 'foo':
    a = 1
elif test == 'bar':
    b = 2
else:
    c = 3

我想使用here描述的dict方法,但是如何修改它以更改多个变量?我希望它能像这样工作:

options = {'foo': ('a',1), 'bar': ('b',2)}
reassign_variables(options,test, ('c',3))

或者,如果不创建一个函数并单独对所有条件进行硬编码,这是不是可以做到?

4 个答案:

答案 0 :(得分:2)

这将改变模块全局命名空间中的变量

>>> options = {'foo': ('a',1), 'bar': ('b',2)}
>>> 
>>> def reassign_variables(options, test, default):
...     var, val = options.get(test, default)
...     globals()[var] = val
... 
>>> 
>>> a, b, c = None, None, None
>>> reassign_variables(options, "foo", ('c',3))
>>> a,b,c
(1, None, None)
>>> reassign_variables(options, "baz", ('c',3))
>>> a,b,c
(1, None, 3)
>>> 

答案 1 :(得分:0)

如果我说得对,请使用dict.update这样的方法:

test = 'foo'
options.update({test:('a',12)})

答案 2 :(得分:0)

您可以将值重新调回变量

a,b,c = None, None, None
options = {'foo': (1,b,c), 'bar': (a,1,c)}
default = (a,b,1)
test = 'foo'
a,b,c = options.get(test,default)

答案 3 :(得分:-1)

根据this,您可以使用globals()按名称访问变量。将此方法应用于您要解决的问题,您只需在调用options.get

时使用默认值。
test = 'foo'
options = {'foo': ('a', 1), 'bar': ('b', 2)}
default = ('c', 3)
var_name, var_value = options.get(test, default)
globals()[var_name] = var_value

如果变量是对象的成员,则可以按照here的说明使用setattr。