Search code examples
pythonvariable-variables

How do I create variable variables?


I know that some other languages, such as PHP, support a concept of "variable variable names" - that is, the contents of a string can be used as part of a variable name.

I heard that this is a bad idea in general, but I think it would solve some problems I have in my Python code.

Is it possible to do something like this in Python? What can go wrong?


If you are just trying to look up an existing variable by its name, see How can I select a variable by (string) name?. However, first consider whether you can reorganize the code to avoid that need, following the advice in this question.


Solution

  • You can use dictionaries to accomplish this. Dictionaries are stores of keys and values.

    >>> dct = {'x': 1, 'y': 2, 'z': 3}
    >>> dct
    {'x': 1, 'y': 2, '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 0
    lst.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.