2013-12-11 3 views
1

Как я могу сгенерировать имя переменной из строки (например, конкатенация буквы и числа)?Эквивалент «genvarname» в Python

В Matlab, эта задача может быть легко сделано с помощью genvarname

+0

Умм я вроде надеюсь, что нет: p Это грязно! Вам это абсолютно необходимо? – Roberto

+2

сохраните свои данные из ваших имен переменных. Используйте 'dict' или * возможно *' getattr', в зависимости от ситуации. – roippi

+1

Посмотрите, подходит ли эта ветка: http://stackoverflow.com/questions/1373164/how-do-i-do-variable-variables-in-python содержит комментарии о 'getattr',' exec', 'eval 'и почему на самом деле лучше использовать словари :) – Roberto

ответ

1

Вот действительно плохой путь (неопределенное поведение), но я думаю, что он показывает путь к более разумным способом.

Ваше текущее пространство имен действительно словарь под одеялом:

>>> local_namespace = locals() 
>>> name = "myVarName" 
>>> local_namespace[name] = 'VarData' 
>>> myVarName 
'VarData' 

Но это не очень DRY - вы должны написать имя переменной в два раза! Было бы хорошо, чтобы использовать переменную, которая хранится имя нашего динамически созданной переменной, поэтому мы не должны ввести его дважды:

>>> name 
'myVarName' 

явно не работает для этого. Но мы снова можем использовать наш словарь:

>>> local_namespace[name] 
'VarData' 

Итак, теперь мы можем сохранить и вспомнить значение, связанное с нашей переменной. Но подождите - нет необходимости использовать специальный словарь locals() для этого - обычный словарь сделает!

>>> d = {} 
>>> d[name] = 'VarData' 
>>> d[name] 
'VarData' 

И теперь у нас есть все эти дополнительные преимущества, как возможность отслеживать имена некоторых из этих переменных в списке:

>>> l = [] 
>>> l.append('myVarName') 
>>> l.append('anotherVarName') 

Словари даже сделать это для нас:

>>> d['anotherVarName'] = 123 
>>> d.keys() 
['myVarName', 'anotherVarName'] 

Если вы не делаете ужасно сумасшедшие вещи, трудно представить, как конструктивные имена переменных могут быть более полезными, чем использование словаря.

0

Вы можете использовать exec("").

Но вы действительно (!!!) не хотят.

>>> name="myVarName" 
>>> exec(name+"='VarData'") 
>>> myVarName 
'VarData' 
+1

Вы также можете добавить его вручную в свой объем, но вы действительно не хотите этого делать. – Hyperboreus

Смежные вопросы