【问题标题】:How to iterate through a list of keywords to fill a function in Python?如何遍历关键字列表以填充 Python 中的函数?
【发布时间】:2021-06-16 14:31:48
【问题描述】:

我正在用 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 

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

【问题讨论】:

  • “调用一个变量来填充列表中的任何元素”。这是什么意思?

标签: python loops for-loop datareader google-finance-api


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

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

    class DataReader:
        
        def __init__(self, ticker, something, start, 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, 'stooq', 1, 1))
    
    new = test(['BAC','C','GS','JPM','MS','WFC'])
    

    测试:

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

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

    tickers = {t: DataReader(t, 'stooq', 1, 1) for t in ['BAC','C','GS','JPM','MS','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>}
    

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

        你可以这样填写字典:

        tickers = ['BAC','C','GS','JPM','MS','WFC']
        BAC = {tick:data.DataReader(tick, 'stooq', start, end) for tick in tickers}
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-05-21
          • 2020-07-29
          • 1970-01-01
          • 2020-05-01
          • 1970-01-01
          • 2023-04-04
          • 2021-02-21
          相关资源
          最近更新 更多