如何创建可变变量?
我知道有些其他编程语言,比如PHP,支持一种叫“变量变量名”的概念,也就是说,你可以用字符串的内容来作为变量名的一部分。
我听说这通常不是个好主意,但我觉得这样可以解决我在Python代码中遇到的一些问题。
在Python中可以这样做吗?会有什么问题呢?
如果你只是想通过名字来查找一个已经存在的变量,可以看看如何通过(字符串)名字选择变量?。不过,首先考虑一下是否可以重新组织代码,避免这种需求,参考这个问题中的建议。
18 个回答
117
使用内置的 getattr
函数可以通过名字获取对象的属性。你可以根据需要修改这个名字。
obj.spam = 'eggs'
name = 'spam'
getattr(obj, name) # returns 'eggs'
440
你可以使用字典来实现这个功能。字典是存储键和值的地方。
>>> dct = {'x': 1, 'y': 2, 'z': 3}
>>> dct
{'x': 1, 'y': 2, 'z': 3}
>>> dct["y"]
2
你可以使用变量作为键名,这样就能实现类似变量变量的效果,而且没有安全风险。
>>> x = "spam"
>>> z = {x: "eggs"}
>>> z["spam"]
'eggs'
如果你考虑做一些像下面这样的事情
var1 = 'foo'
var2 = 'bar'
var3 = 'baz'
...
那么列表可能比字典更合适。列表表示一个有序的对象序列,使用整数索引来访问:
lst = ['foo', 'bar', 'baz']
print(lst[1]) # prints bar, because indices start at 0
lst.append('potatoes') # lst is now ['foo', 'bar', 'baz', 'potatoes']
对于有序的序列,列表比使用整数键的字典更方便,因为列表支持按索引顺序遍历、切片、append
等操作,而这些在字典中管理键会比较麻烦。