gpt4 book ai didi

python - 在函数中重新分配 arg 值的最佳方法

转载 作者:行者123 更新时间:2023-11-30 21:54:31 26 4
gpt4 key购买 nike

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

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 语句更简单的方法,或更Pythonic/简洁的方法?我觉得我可以对数据框中的每一列执行类似 setattr 的操作,但我不知道如何将它们传递给第二个 ta.func 函数。

谢谢!

最佳答案

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

for arg in args:
arg = data[arg].to_numpy()

但是,这不会达到我认为您想要的预期行为。当您迭代列表时,必须通过 args[i] = 而不是 arg = 直接引用列表来重新分配值。请参阅link .

此外,当将 *args 传递给函数时,args 将是一个元组,而不是一个列表。所以你需要:

  1. 将参数转换为列表。
  2. 使用 args[i] = 而不是 arg = 重新分配 args 中的值,这可以使用 enumerate() 函数轻松完成在Python中:
args = list(args)
for i, arg in enumerate(args):
try:
args[i] = data[arg].to_numpy()
except:
continue

它包含在 try/catch 语句中,以确保如果 arg 不是数据帧中的有效位置,它将忽略它。

关于python - 在函数中重新分配 arg 值的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59021425/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com