如何 运行 多次使用相同的函数并另存为新变量

How to run same function multiple times and save as new variable

正如标题所说,我正在尝试 运行 一个函数大约 30 多次,但每次 运行 都使用不同的变量。我试图将每次 运行s 保存为不同的变量,因为之后,将对它们进行不同的计算 运行。这是一个示例:

first = my_func(name = a, desc = b, ticker = c)
first.dict_name1 = z_score(first.data,12)

second = my_func(name = d, desc = e, ticker = f)
second.dict_name1 = ... (a diff calculation)

third = my_func(.....same process....)


class my_func:

    def __init__(
                 self,
                 name       = [],
                 desc       = '',
                 # tickers can be loaded as a list of strings, or if a custom field is needed it can use a tuple
                 tickers    = [],
                 indicator  = [],
                 signal     = []
                ):
    
        self.name       = name
        self.desc       = desc
        self.tickers    = tickers
    
        self.data       = {}
        self._data      = {}
    
        for ticker in tickers:
        
            # check if the ticker is a tuple, if so call the custom field
            if isinstance(ticker, tuple):
                self.load_data(ticker[0],ticker[1])
            else:
                self.load_data(ticker)

    def load_data(self,ticker, field='PX_LAST'):
    
        self.data[ticker] = bbg.bdh(ticker, fld_list = field, start_date='19300101')

将每个 运行 的参数保存在一个列表中并对其进行迭代。

lst = [(a, b, c), (d, e, f)]
results = [my_func(name=name, desc=desc, ticker=ticker) for name, desc, ticker in lst]

这是循环和列表的一个很好的用例。列表列表包含每个调用的参数,并将它们收集在结果列表中

my_func_table = 
    # name, desc, ticker
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9] ]

results = []
for name, desc, ticker in my_func_table:
    val = my_func(name=name, desc=desc, ticker=ticker)
    val.dict_name1 = z_score(val.data,12)
    results.append(val)

您还可以将这些结果与名称相关联。可能是带有名称的字典、全局名称空间,甚至是将名称作为属性的普通 class。

result_names = ["first", "second", etc...]

for var, vals in zip(result_names, my_func_table):
    name, desc, ticker = vals
    val = my_func(name=name, desc=desc, ticker=ticker)
    val.dict_name1 = z_score(val.data,12)
    globals()[var] = val