在单个元组中组织嵌套元组的值

时间:2014-05-12 09:28:51

标签: python python-2.7 tuples

我从我拥有的特定类对象中提取特征,并决定构建一个方法,一次提取所有特征,即调用所有特征提取方法并将它们返回元组,如下所示。

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;这样我就可以返回一个只有数字而不是数字的元组,也可能是无限大小的嵌套元组?

1 个答案:

答案 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 Noneself.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)