How do I create variable variables?
You can use dictionaries to accomplish this. Dictionaries are stores of keys and values.
>>> dct = {'x': 1, 'y': 2, 'z': 3}>>> dct{'y': 2, 'x': 1, 'z': 3}>>> dct["y"]2
You can use variable key names to achieve the effect of variable variables without the security risk.
>>> x = "spam">>> z = {x: "eggs"}>>> z["spam"]'eggs'
For cases where you're thinking of doing something like
var1 = 'foo'var2 = 'bar'var3 = 'baz'...
a list may be more appropriate than a dict. A list represents an ordered sequence of objects, with integer indices:
lst = ['foo', 'bar', 'baz']print(lst[1]) # prints bar, because indices start at 0lst.append('potatoes') # lst is now ['foo', 'bar', 'baz', 'potatoes']
For ordered sequences, lists are more convenient than dicts with integer keys, because lists support iteration in index order, slicing, append
, and other operations that would require awkward key management with a dict.
Use the built-in getattr
function to get an attribute on an object by name. Modify the name as needed.
obj.spam = 'eggs'name = 'spam'getattr(obj, name) # returns 'eggs'
It's not a good idea. If you are accessing a global variable you can use globals()
.
>>> a = 10>>> globals()['a']10
If you want to access a variable in the local scope you can use locals()
, but you cannot assign values to the returned dict.
A better solution is to use getattr
or store your variables in a dictionary and then access them by name.