You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 08:54:20