Исходный код Pandas _get_grouper называет себя - PullRequest
0 голосов
/ 04 февраля 2019

Я смотрел на следующие панды исходный код

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 голосов
/ 04 февраля 2019

Обратите внимание, что вне класса есть еще одна функция _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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...