我碰巧运行了一个这样的代码段,该代码段是我从Class方法中选择的,并删除了参数中的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_search,则会报告NameError
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
答案 0 :(得分:3)
它不起作用。您的代码永远不会碰到涉及self
的条件语句。如果这样做,它将产生一个NameError
。