2014-02-20 3 views
1

Предположим, у меня есть такая строка.Использование значения строки в качестве имени переменной

string = "someString" 

Теперь я хочу создать новый экземпляр объекта dict(), используя переменную, хранящуюся в строке. Я могу сделать это?

string = dict() 

Надеясь, это будет "someString = dict()". Это правильно? Если нет, как мне это сделать? Все еще изучать питон. Любая помощь будет принята с благодарностью.

+0

Можете ли вы показать пример с ожидаемым выходом? – thefourtheye

+0

вы * почти наверняка * не должны этого делать, но 'globals() ['someString'] = dict()' будет делать то, что вы просите – mhlester

+2

Пожалуйста, не надо, хотя – slezica

ответ

2

Да, это возможно сделать это, хотя это считается плохо, что нужно сделать:

string = 'someString' 
globals()[string] = dict() 

Вместо этого вы должны сделать что-то вроде:

my_dynamic_vars = dict() 
string = 'someString' 

my_dynamic_vars.update({string: dict()}) 

затем my_dynamic_vars[string] является dict()

+0

Нет необходимости в 'update'; 'my_dynamic_vars [string] = {}' работает так же хорошо и не создает временный словарь. – DSM

+0

Справедливая точка. OP «все еще учится python», поэтому я пошел с явным, а не подразумеваемым :) –

1

Вы действительно не должны это делать, но если вы действительно хотите, вы можете использовать Exec()

Для примера, можно использовать этот:

exec(string + " = dict()") 

И это приписывать бы, новый словарь для переменной по имени любой строки.

+0

Я не рекомендую это, но я тоже не получаю downvotes. В отличие от присваивания 'locals()', например, этот будет работать. – DSM

+0

Я бы не рекомендовал какой-либо метод, который имеет имена переменных переменных, но это то, о чем спрашивает OP. Есть ли какая-то особая причина, по которой использование locals() и globals() было бы лучше, чем exec()? – kabb

1

Использование черной магии, вид которой Это возможно.

Функции globals() и locals(), например, предоставят вам словари, которые содержат переменные, находящиеся в настоящее время в области как записи (ключ, значение). В то время как вы можете попытаться отредактировать эти словари, результаты иногда непредсказуемы, иногда неверны, и всегда нежелательно.

Так что нет. Невозможно создать переменную с неявным именем.

1

Если переменная вы хотите установить внутри объекта, вы можете использовать setattr(instance,'variable_name',value)

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