递归函数主体中未定义的“ self”未报告NameError

时间:2019-10-21 06:40:37

标签: python

我碰巧运行了一个这样的代码段,该代码段是我从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。

enter image description here

如果尝试过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

1 个答案:

答案 0 :(得分:3)

它不起作用。您的代码永远不会碰到涉及self的条件语句。如果这样做,它将产生一个NameError