将列表中的字符串替换为新的变量名称

Substituting string from list into new variable names

我正在尝试在引用字符串列表时创建新的对象变量。我正在尝试使用 exec() 和 .format 来填写变量名,但我不断收到语法错误:

df_MMM=<__main__.stock_ object at 0x7fde41682890>
       ^

语法错误:语法无效*

这是我的代码:

class stock_:
    def __init__(self, ticker):
        self.ticker=ticker
    def frame(self):
        return web.DataReader(self.ticker,'yahoo',start, end)

list_of_stocks=['MMM','AXP',"AMGN",'AAPL','BA','CAT','CVX','CSCO','KO']

for i in list_of_stocks:
    exec("df_{}={}".format(i,stock_(i)))

感谢任何帮助。谢谢

您需要验证您的格式值

exec("df_{}={}".format(i,stock_(i)))

您是否跟踪了您的值(标准调试实践)?我想不是。 stock_(i) 是 class ... 对象的一个​​实例。它的字符串表示形式就是您在错误消息中看到的内容。您是否正在尝试生成一行代码来进行实例化?上面的行进行了实例化,并将生成的字符串表示形式提供给 exec。或许是这样:

exec("df_{}=stock_('{}')".format(i,i))

这将仅评估 i,并将该值放入您的字符串中,例如

df_MMM=stock_('MMM')

我需要提出我在这里看到的 x-y 问题。您正在制作一组有点随意的新变量;我担心你会如何使用它们。我强烈怀疑更好的方法是用股票代码键入字典——创建一个字典,而不是九个新变量。

stock_table = {}
for i in list_of_stocks:
    stock_table[i] = stock_(i)

您也可以通过听写理解在一行中执行此操作。 编码留给学生作为练习。 :-)