递归函数正文中的未定义`self`未报告NameError

问题描述 投票:-2回答:1

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

我碰巧运行了一个这样的代码段,该代码段是我从Class方法中选择的,并删除了参数中的self,但将其保留在body中。 def bi_search(a,x,lo = 0,hi = None)-> int:如果hi == None:...

python
1个回答
3
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.