我具有以下功能:
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
应该参与某个地方,但不确定在这种情况下如何使用它。
答案 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