我从我拥有的特定类对象中提取特征,并决定构建一个方法,一次提取所有特征,即调用所有特征提取方法并将它们返回元组,如下所示。
def extractFeatures(self):
if self.getLength()<=10:
return ()
else:
return (self.getMean(), # a number
self.getStd(), # a number
self.getSkew(), # a number
self.getKurt(), # a number
# Many other methods here, such as:
self.getACF(), # which returns a TUPLE of numbers...
)
尽管如此,我有一些方法可以使用数字而不是单个数字返回元组,并且因为我仍在进行一些测试并改变这些元组中每个元组的长度,所以硬键入self.getACF()[0], self.getACF()[1], self.getACF()[2], ...
不是好主意。
是否有一种获得这些价值的pythonic方式&#34; unpacked&#34;这样我就可以返回一个只有数字而不是数字的元组,也可能是无限大小的嵌套元组?
答案 0 :(得分:1)
您可以为list
构建return
个值,然后在结尾处转换为元组。这使您可以将append
用于单个值,将extend
用于元组:
def extractFeatures(self):
if self.getLength() > 10:
out = [self.getMean(), self.getStd(), self.getSkew()]
out.append(self.getKurt()] # single value
out.extend(self.getACF()) # multiple values
return tuple(out)
请注意,如果return None
为self.getLength()
或更少,则会隐式10
。
但是,请记住,您的呼叫功能现在需要确切地知道将要发生的数字和顺序。在这种情况下,另一种方法是返回字典:
return {'mean': self.getMean(), ... 'ACF': self.getACF()}
现在调用函数可以轻松访问key所需的功能,您可以使用字典解包将这些作为关键字参数传递给其他函数:
def func_uses_mean_and_std(mean=None, std=None, **kwargs):
...
features = instance.extractFeatures()
result = func_uses_mean_and_std(**features)