Python在外部函数调用上为嵌套函数定义参数

时间:2018-08-13 11:12:17

标签: python pandas

我具有以下功能:

def splot (self,what):
    df = pd.DataFrame((self.spec[what]).compute()).plot()
    plt.show()
    return df

当我调用.plot()函数时,我希望能够将parameters传递给splot方法,如下所示:

def splot (self,what,arg=None):
    df = pd.DataFrame((self.spec[what]).compute()).plot(arg)
    plt.show()
    return df

因此,当我调用splot时,会给它两个参数:'what'(一个字符串),以及我希望plot命令采用的参数。

但是,这是行不通的:如果我将参数作为字符串传递,则会得到KeyError,否则,它将引发变量错误。我觉得*args应该参与某个地方,但不确定在这种情况下如何使用它。

1 个答案:

答案 0 :(得分:0)

实际上,正如您所猜测的那样,您必须使用拆包运算符*。这是一个与您的代码接近的示例,以进行解释:

class myClass:

    def myPlot(self, x=None, y=None):
        print("myPlot:", x)
        print("myPlot:", y)

    def myFunc(self, what, *args, **kwargs):
        print(what)         # 'toto'
        print(args)         # tuple with unnamed (positional) parameters
        print(kwargs)       # dictionary with named (keyword) parameters
        self.myPlot(*args, **kwargs)   # use of * to unpack tuple and ** to unpack dictionary


myObject = myClass()
myObject.myFunc("toto", 4, 12)         # with positional arguments only
myObject.myFunc("toto", x = 4, y = 12) # with keyword arguments only
myObject.myFunc("toto", 4, y = 12)     # with both

因此,您应该这样编写代码:

def splot (self, what, *args, **kwargs):
    df = pd.DataFrame((self.spec[what]).compute()).plot(*args, **kwargs)
    plt.show()
    return df