Python 将字符串的值用作变量名

Python 将字符串的值用作变量名,python,string,dictionary,Python,String,Dictionary,假设我有一根这样的线 string = "someString" 现在,我想使用存储在字符串中的变量创建一个新的dict()对象实例。我能做这个吗 string = dict() 希望它变成“someString=dict()”。是这样吗?如果没有,我该怎么做?还在学习python。任何帮助都将不胜感激。您确实不应该这样做,但如果您确实想这样做,您可以使用exec() 对于您的示例,您可以使用以下内容: exec(string + " = dict()") 这将根据字符串的名称为变量分配一

假设我有一根这样的线

string = "someString"
现在,我想使用存储在字符串中的变量创建一个新的dict()对象实例。我能做这个吗

string = dict()

希望它变成
“someString=dict()”
。是这样吗?如果没有,我该怎么做?还在学习python。任何帮助都将不胜感激。

您确实不应该这样做,但如果您确实想这样做,您可以使用exec()

对于您的示例,您可以使用以下内容:

exec(string + " = dict()")

这将根据字符串的名称为变量分配一个新字典。

您确实不应该这样做,但如果您确实想这样做,您可以使用exec()

对于您的示例,您可以使用以下内容:

exec(string + " = dict()")
这将根据字符串的名称为变量分配一个新字典。

是的,这是可能的,尽管这被认为是一件不好的事情:

string = 'someString'
globals()[string] = dict()
相反,您应该做如下操作:

my_dynamic_vars = dict()
string = 'someString'

my_dynamic_vars.update({string: dict()})
然后,
my\u dynamic\u vars[string]
是一个
dict()
是的,可以这样做,尽管这被认为是一件不好的事情:

string = 'someString'
globals()[string] = dict()
相反,您应该做如下操作:

my_dynamic_vars = dict()
string = 'someString'

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

然后,
mydynamic\u vars[string]
是一个使用黑魔法的
dict()

,这种魔法可以让你进入python地狱

例如,
globals()。虽然您可以尝试编辑这些词典,但结果有时是不可预测的,有时是不正确的,而且总是不受欢迎的


所以没有。没有办法创建一个非显式名称的变量。

使用黑魔法,也就是让你进入python地狱的那种,这是可能的

例如,
globals()。虽然您可以尝试编辑这些词典,但结果有时是不可预测的,有时是不正确的,而且总是不受欢迎的


所以没有。没有办法用非显式名称创建变量。

如果要设置的变量在对象内部,可以使用
setattr(实例,'variable\u name',value)
如果要设置的变量在对象内部,可以使用
setattr(实例,'variable\u name',value)

你能展示一个预期输出的例子吗?你几乎肯定不应该这样做,但是
globals()['someString']=dict()
会按照你的要求去做,其中包括很多关于你为什么可能不想这样做的解释。你能展示一个预期输出的例子吗?你几乎肯定不应该这样做,但是
globals()['someString']=dict()
将按照您的要求执行,其中包括许多关于您可能不想执行此操作的原因的解释。我不建议这样做,但我也没有得到反对票。例如,与赋值给
locals()
不同,这个方法实际上是有效的。我不推荐任何一种具有变量名的方法,但OP就是这么要求的。使用locals()和globals()比使用exec()更好,有什么特别的原因吗?我不建议这样做,但我也没有得到反对票。例如,与赋值给
locals()
不同,这个方法实际上是有效的。我不推荐任何一种具有变量名的方法,但OP就是这么要求的。使用locals()和globals()比exec()更好,有什么特别的原因吗?不需要
更新
my_dynamic_vars[string]={}
也能正常工作,并且不会创建临时字典。公平点。OP是“仍在学习python”,所以我选择了显式而不是隐式:)不需要
更新
my_dynamic_vars[string]={}
也能正常工作,并且不会创建临时字典。公平点。OP是“仍在学习python”,所以我选择了显式而不是隐式:)