Python2类内递归函数报‘global name未定义’,Python3正常,求解决
解决Python2中类递归方法调用的名称错误
这个报错global name 'jumpFloor' is not defined的原因很明确:你在类的实例方法内部直接写jumpFloor(number-1),Python2会把它当成全局函数去查找,但jumpFloor是Solution类的实例方法,必须通过self来引用才能调用到。
关于Python3运行的小说明
其实严格来说,这段代码在标准的Python3环境里也会报同样的错误,除非你在全局作用域额外定义了同名的jumpFloor函数。可能是你测试时的环境巧合或者代码小修改,才让它在Python3里正常跑起来了。
修复后的完整代码
只需要把递归调用的部分改成通过self调用方法,同时可以优化number=0的返回逻辑(避免输出None):
class Solution: def jumpFloor(self, number): # 处理number为0的情况,返回0(可根据需求调整) if number == 0: return 0 elif number == 1 or number == 2: return number # 必须用self.前缀调用类的实例方法 return self.jumpFloor(number-1) + self.jumpFloor(number-2) test = Solution() for i in range(8): print(test.jumpFloor(i))
运行效果
修改后,不管是Python2还是Python3,运行结果都会是:0 1 2 3 5 8 13 21,既解决了Python2中的名称错误,也修正了原代码中number=0返回None的问题。
本质上来说,Python2和Python3在类实例方法的调用规则上是一致的:实例方法必须通过实例对象(也就是方法里的self参数)来调用,这是面向对象编程的基础规则,之前的问题只是因为你遗漏了self前缀导致的查找错误。
内容的提问来源于stack exchange,提问作者Xiaoyu Wang
相关产品推荐
相关产品推荐

