То, что вы пытаетесь сделать, это плохая практика.
Что вам действительно нужно, так это dict
:
>>> dct = {'pasta': [1,2,3]}
>>> x = 'pas' + 'ta'
>>> dct[x]
[1, 2, 3]
Это право структура данных для конкретной задачи, которую вы пытаетесь достичь: использование строки для доступа к объекту.
Другие ответы предлагали (или просто показывали с беспокойством) разные способы сделать это.Поскольку Python является очень гибким языком, вы почти всегда можете найти такие разные пути для выполнения определенной задачи, но «должен быть один - и предпочтительно только один - очевидный способ сделать это» [1] .
Все они сделают свою работу, но не без недостатков:
locals()
менее читабелен, излишне сложен и в некоторых случаях также подвержен риску (см. Mark Byers answer).Если вы используете locals()
, то вы собираетесь смешивать реальные переменные с переменными базы данных, это грязно. eval()
довольно уродливо, это просто "-простой способ получить некоторый исходный код динамически " [2] и плохая практика .
Когда всомнение в правильности выбора, попытка следовать Zen of Python может быть началом.
И, эй, даже InteractiveInterpreter
можно использовать для доступа к объекту с помощью строки, но это не значит, что я собираюсь.