Python:使用普通字符串以外的东西创建变量?

Python:使用普通字符串以外的东西创建变量?,python,pandas,syntax-error,Python,Pandas,Syntax Error,在另一个问题中,我尝试使用enumerate和for元素创建一个使用元素作为名称的数据框架。事实证明,这个问题更为普遍。是否可以使用普通字符串以外的内容设置变量值?在Bash中,这是通过Read命令完成的,该命令将先前的输出带到子shell中,并将其分配给变量名(我将在下面就此提出问题) 有没有办法在Python中实现这一点?i、 例如,简单地说: list1[0]=pd.dataframe(data),其中list1[0]是一个字符串。或者类似地使用dict键,其中值为数据帧: dict1中的

在另一个问题中,我尝试使用enumerate和for元素创建一个使用元素作为名称的数据框架。事实证明,这个问题更为普遍。是否可以使用普通字符串以外的内容设置变量值?在Bash中,这是通过Read命令完成的,该命令将先前的输出带到子shell中,并将其分配给变量名(我将在下面就此提出问题)

有没有办法在Python中实现这一点?i、 例如,简单地说:

list1[0]=pd.dataframe(data)
,其中list1[0]是一个字符串。或者类似地使用dict键,其中值为数据帧:

dict1中的i的
:i=dict1[键]
或dict1中的i的
:函数(i)=dict1[键]

后者在使用str()或任何函数时都不起作用,因为错误抱怨“SyntaxError:can not assign to function call”,但可能是类似的

编辑: 好吧,在与@juanpa.arrivillaga进行了长时间的讨论之后,他解释说字符串并不像Bash中那样是普通字符串。让我们看看我是否有这个权利。。它们是存储在dict对象中的字符串对象。(即使整数也存储为对象,除非使用在Python数组上展开的numpy或pandas)。在dict1中i的
内部:
循环print(i)之所以有效,是因为“print将对传递给它的任何对象隐式调用str”。i=value不存在,因为“将变量视为对象上抛出的名称标记”,而i在其for循环范围内被解析为dict对象键。我不知道为什么,但变量“nametags”不能是字符串对象

重复答案中提到的使用globals()的解决方法存在:

用于dict1:globals()[key]=pd.DataFrame()


这是因为在CPython中,他们使用实际的python对象来实现全局名称空间。可以“使用ctypes修改本地作用域中的名称空间数组”,因为另一种解决方法是使用SimpleNamespace创建一个新对象来存储变量(可能是因为它们存储为对象,与globals()中的存储方式相同),并总结,
setattr(sys.modules[\u name],var\u name,var\u value)
相当于
globals()[var\u name]=var\u value

我认为这个问题可以通过字典解决:


var\u names=['your\u string','your\u second\u string']
dict={}
对于i,枚举中的变量名称(变量名称):
var_name=f'var_name{i}'
dict[var_name]=pd.DateFrame([])

很抱歉,很难理解问题的确切含义

for i in dict1: function(i) = dict[key]
这有两个问题:左边的东西是您分配的内容,因此语法应该是
dict[key]=function(i)
(但不要称您的dict为“dict”,因为这是一个保留关键字)。这是假设某个地方定义了键。这就是为什么会出现您描述的错误-您不能分配给函数调用,而是分配给变量

至于在列表中存储内容,您可以将任何您喜欢的内容放在列表中,字典也是如此。例如:

import pandas as pd

ls = [pd.DataFrame(), 'Hello']

d = {
    'a': pd.DataFrame(),
    1: pd.DataFrame()
}

print(ls)
print(d['a'])
print(d[1])

您好,是的,我声明这不起作用..我正在寻找一个可行的解决方案,这只是一个解决dict1中I的
:I=dict1[key]
,其中dict1[key]的值是一个dataframeno,但为了更清晰,我编辑了它,我希望你能添加一些代码,这样问题就更清楚了?我不太确定在我尝试让它工作后你在做什么:
对于dict1中的I:I=pd.dataframe()
,其中dict1是名称和数据帧。它应该以多个可以通过名称调用的数据帧结尾,比如输出数据帧的标准的
name=pd.dataframe();name
。“是否仍然可以使用普通字符串以外的内容设置变量值?”我不知道你在问什么。变量不是字符串。你是在问如何动态创建变量吗?@juanpa.arrivillaga,我更新了标题以使其更清楚。我的意思是变量“name”意味着它被调用,而不是普通字符串。意味着使用str(s)等函数的字符串输出,其中s可以是dict键、列表项或其他字符串。或者简单地使用dict键、列表项等,两者都不起作用。那么你的意思是动态创建变量吗?不要这样做。使用容器,比如列表或dict。@juanpa.arrivillaga,你可以这样称呼它。告诉人们该怎么做既幼稚又无用,这是我问的原因。显然,使用dict是一种流行的解决方案。如果只需要一个或两个变量,它不如“动态”创建dict有效。在重复问题中还有其他解决方案可以工作,包括简洁地使用var()或global()函数,以及可能使用
setattr(sys.modules[\uuu name]、var\u name、var\u value)
。不,我只是向您提供最佳实践。实际上,这就是本网站的全部目的,为人们提供如何处理代码的建议。您可以随意忽略这一点,编写不干净的、有黑客行为的代码,就像您提到的示例一样(作为实施细节,仅在CPython的全局范围内有效)。