我碰巧在一个类方法中运行了这样一个片段,并删除了
self
在辩论中,但要把它留在身体里。
def bi_search(a, x, lo=0, hi=None) -> int:
if hi == None:
hi = len(a)
if lo < 0:
raise ValueError('low must be non-negative')
if lo == hi:
return None
mid = (lo + hi) // 2
if x == a[mid]:
return x
if x > a[mid]:
lo = mid + 1
return self.bi_search(a, x, lo, hi)
if x < a[mid]:
hi = mid
return self.bi_search(a, x, lo, hi)
print(bi_search([1, 2, 3, 4], 3))
它工作得很好,没有报告任何错误,
为什么不报告NameError。
如果尝试了self.bi_搜索它,则报告名称错误
In [2]: self.bi_search
---------------------------------------------------------------------------
NameError Traceback (most recent call last)
<ipython-input-2-f458d3bc4fee> in <module>
----> 1 self.bi_search
NameError: name 'self' is not defined