首页 > 解决方案 > 当需要 args、kwargs 时仅使用 kwargs 调用函数

问题描述

我正在围绕 TA-lib 编写一个包装器,以将函数作为管道的一部分来调用。一些函数具有预期和可选参数。我希望简单地使用疣并映射命名参数,但它似乎只是映射预期参数而不是映射可选参数。

import pandas as pd
from talib import abstract

class TALibAugments():
    """
    Augment with TA-lib functions
    Parameter documentation: https://mrjbq7.github.io/ta-lib/
    Function Sample: real = MA(close, timeperiod=30, matype=0)
    """
    def __init__(self, function_name, out_cols, **kwargs):
        self.ta_lib_function = abstract.Function(function_name)
        self.out_cols = out_cols
        self.ta_lib_kwargs = kwargs

    def augment(self, df, concat=False):
        fn_result = self.ta_lib_function(self.ta_lib_kwargs) # Problem here

        df_out = None
        if len(self.out_cols) == 1:
            df_out = pd.DataFrame(fn_result, index=df.index, columns=self.out_cols)
        else:
            df_out = pd.DataFrame()
            for i in range(0, len(fn_result)):
                df_out[self.out_cols[i]] = pd.Series(fn_result[i], index=df.index)
        
        return df_out

如此实例化

ma_slow_augments = TALibAugments("MA", ["ma_slow"], close=df_resampled["close"], timeperiod=100, matype=0) 

我不确定 _Function 做了什么这是来自 TA-lib abstract.Function 函数的代码:

def Function(function_name, *args, **kwargs):
    func_name = function_name.upper()
    if func_name not in _func_obj_mapping:
        raise Exception('%s not supported by TA-LIB.' % func_name)

    return _Function(
        func_name, _func_obj_mapping[func_name], *args, **kwargs
    )

标签: pythonpandasta-lib

解决方案


推荐阅读