Interchange of Position of Two Keyword Arguments Throws Error
我有个奇怪的问题。我知道在python中,Kwargs遵循args,所以我检查了一下,这不是问题所在。问题是:
好的:
类型错误:
引发错误的调用行如下所示:
1 2 | def __getslice__(self, start, stop): return Channel(self.sample_rate, self.label, data=list.__getslice__(self,start,stop)) |
完整代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | class Channel(list): sample_rate = 0 def __init__(self, sample_rate, data=[], label=u"" ): list.__init__(self,data) self.sample_rate = sample_rate self.label = label @property def nyquist_rate(self): return float(self.sample_rate) / 2.0 def __getslice__(self, start, stop): return Channel(self.sample_rate, self.label, data=list.__getslice__(self,start,stop)) |
谢谢您!
在第二个版本(
1 | return Channel(self.sample_rate, label=self.label, data=list.__getslice__(self,start,stop)) |
你用的是
1 | Channel(self.sample_rate, self.label, data=list.__getslice__(self,start,stop)) |
注意,第二个参数没有关键字,所以解释器假定这是
但是,您的代码中有一个更重要的错误:不要将[]用作默认值。原因是此代码在函数定义时被评估。每次调用不带
问题是,在调用代码中,有两个位置参数:
1 2 | return Channel(self.sample_rate, self.label, data=list.__getslice__(self,start,stop)) # sample_rate (pos) data (pos) data (kw) |
在python 2.x中,函数定义中的位置参数和关键字参数没有区别。调用函数时,使用函数调用中的位置参数从左到右填充参数,然后绑定所有关键字参数。在您的例子中,