熊猫源代码_get_grouper自称

时间:2019-02-04 11:27:15

标签: python python-3.x pandas pandas-groupby

我正在看以下大熊猫source code

def _get_grouper(self, obj, validate=True):
    """
    Parameters
    ----------
    obj : the subject object
    validate : boolean, default True
        if True, validate the grouper
    Returns
    -------
    a tuple of binner, grouper, obj (possibly sorted)
    """

    self._set_grouper(obj)
    self.grouper, exclusions, self.obj = _get_grouper(self.obj, [self.key],
                                                      axis=self.axis,
                                                      level=self.level,
                                                      sort=self.sort,
                                                      validate=validate)
    return self.binner, self.grouper, self.obj

看起来_get_grouper递归调用自己。这会不会导致无限循环?

我尝试搜索父类,但似乎Grouper类仅继承对象类,并且文件中没有定义其他_get_grouper函数。

这使我有些困惑。

1 个答案:

答案 0 :(得分:1)

请注意,在类外还有另一个_get_grouper函数,正是该代码段中正在调用的函数。

如果在所调用的类中它与_get_grouper相同,则应改为self._get_grouper,因为它是该类的属性。

这是一个简单的例子来说明这一点:

class Sample():  
    def __init__(self,p):
        self.p = p
        if self.p:
            print_()
        else:
            self.print_()
    def print_(self):
        print('This is a function within the Sample class')

def print_():
    print('This is a function outside the Sample class')

s = Sample(p=True)
# This is a function outside the Sample class

s = Sample(p=False)
# This is a function within the Sample class