首页 > 解决方案 > Python在外部函数调用上定义嵌套函数的参数

问题描述

我有以下功能:

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

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

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

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

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

标签: pythonpandas

解决方案


事实上,正如您所猜测的,您必须使用解包运算符 *. 这是一个接近你的代码示例,以便解释:

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

推荐阅读