我正在看以下大熊猫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函数。
这使我有些困惑。
答案 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