Python 在函数中重新分配参数值的最佳方法

Python 在函数中重新分配参数值的最佳方法,python,if-statement,Python,If Statement,我认为首先显示代码最容易解释我的意思: def indicator( self, symbol: str = None, timeframe: str = None, indicator: str = None, period: int = 0, instances: int = 0, *args, **kwargs): data = self.ohlcv(symbol, timeframe, instances + period)

我认为首先显示代码最容易解释我的意思:

def indicator(
        self, symbol: str = None, timeframe: str = None,
        indicator: str = None, period: int = 0, instances: int = 0,
        *args, **kwargs):
    data = self.ohlcv(symbol, timeframe, instances + period)

    for arg in args:
        if arg == 'open':
            arg = data['open'].to_numpy()
        elif arg == 'high':
            arg = data['high'].to_numpy()
        elif arg == 'low':
            arg = data['low'].to_numpy()
        elif arg == 'close':
            arg = data['close'].to_numpy()
        elif arg == 'volume':
            arg = data['volume'].to_numpy()
        else:
            pass

    values = getattr(ta.func, indicator)(args, kwargs)
    return values
在这里,我重新分配作为字符串的参数,即从数据帧打开到打开值数组。有没有比使用一堆if和elif语句更简单或更简洁的方法?我觉得我可以为dataframe中的每一列执行setattr之类的操作,但我不知道如何将它们传递给第二个ta.func函数


谢谢大家!

只需使用arg变量直接访问数据帧:

for arg in args:
    arg = data[arg].to_numpy()
然而,这不会有我认为你想要的预期行为。在迭代列表时,必须通过args[i]=而不是arg=直接引用列表来重新分配值。看

此外,在将*args传递给函数时,args将是一个元组,而不是一个列表。因此,您需要:

将参数转换为列表。 在python中,使用args中的[i]函数可以轻松地重新分配args中的值:
它被包装在try/catch语句中,以确保如果arg不是数据帧中的有效位置,它将忽略它

只需使用arg变量直接访问数据帧:

for arg in args:
    arg = data[arg].to_numpy()
然而,这不会有我认为你想要的预期行为。在迭代列表时,必须通过args[i]=而不是arg=直接引用列表来重新分配值。看

此外,在将*args传递给函数时,args将是一个元组,而不是一个列表。因此,您需要:

将参数转换为列表。 使用args[i]=而不是arg=重新分配args中的值,这可以使用python中的枚举函数轻松完成:
它被包装在try/catch语句中,以确保如果arg不是数据帧中的有效位置,它将忽略它

args是一个元组,因此是不可变的。可以使用元组的内容构建新的元组,但不能更改元组本身。args是一个元组,因此是不可变的。你可以用它的内容建立一个新的元组,但是你不能改变元组本身。非常感谢你,伙计,这太棒了。因此,当我在values=getattrta.func、indicatorargs、kwargs中传入新分配的args时,args现在是列表而不是元组并不重要?@GSatterwhite不确定,但您总是可以将其转换回具有tupleargs的元组,不过我很想知道。非常感谢您,这太棒了。因此,当我在values=getattrta.func、indicatorargs、kwargs中传入新分配的args时,args现在是列表而不是元组并不重要?@GSatterwhite不确定,但您总是可以将其转换回具有tupleargs的元组,不过我很想知道。