如何遍历关键字列表以填充 Python 中的函数?

问题描述

我正在用 Python 做一个金融项目。我正在使用 Pandas 数据框和 DataReader 来获取不同银行的股票数据。我有一个代码”列表,它们是以下函数的输入:

tickers= ['BAC','C','GS','JPM','MS','WFC']            # list of tickers
BAC = data.DataReader('BAC','stooq',start,end).    # example function for 1st element 

我可以为列表的每个元素编写函数并将其存储在不同的变量中。但是我想自动化这个过程,而是创建一个函数,它遍历代码调用一个变量来用列表中的任何元素填充它。帮帮我?

解决方法

我相信你想要的是一个简单的 for 循环作为起点:

returned_values = []
for tick in tickers:
    returned_values.append(data.DataReader(tick,'stooq',start,end))

returned_values 列表将包含您所有的返回值。

,

您可以使用 setattr() 向类添加变量,但您需要一个类来保存变量:

class DataReader:
    
    def __init__(self,ticker,something,stop):
        self.ticker = ticker
        self.something = something
        self.start = start
        self.stop = stop

class test:
    
    def __init__(self,tickers):
        
        for t in tickers:
            setattr(self,t,DataReader(t,1,1))

new = test(['BAC','C','GS','JPM','MS','WFC'])

测试:

print(new.BAC)
<__main__.DataReader object at 0x0000017847C10128>

然而,更好的方法是将对象保存在字典中:

tickers = {t: DataReader(t,1) for t in ['BAC','WFC']}

输出:

{'BAC': <__main__.DataReader at 0x17847d6af28>,'C': <__main__.DataReader at 0x17847d6ac18>,'GS': <__main__.DataReader at 0x17847d6af60>,'JPM': <__main__.DataReader at 0x17847d6afd0>,'MS': <__main__.DataReader at 0x17847d6a7f0>,'WFC': <__main__.DataReader at 0x17847d6a828>}
,

您可以将所有结果存储在 dict 中并访问您需要的任何一个:

my_dict = {t: data.DataReader(t,end) for t in tickers}
,

你可以像这样填写字典:

tickers = ['BAC','WFC']
BAC = {tick:data.DataReader(tick,end) for tick in tickers}