Python报错Global name not defined:类内方法调用问题求助
问题解决:Global name not defined 报错
错误原因分析
你的代码存在两个核心问题,均属于Python类方法的基础规范问题:
- 类实例方法缺少
self参数:mergesort作为Solution类的实例方法,必须将self作为第一个参数传入,否则Python无法识别它是类的成员方法。 - 类内部方法调用未通过
self:不管是sortColors中调用mergesort,还是mergesort自身的递归调用,都必须使用self.mergesort()的形式,否则Python会把mergesort当作全局函数处理,找不到时就会抛出"Global name not defined"错误。
VSCode能正常运行,大概率是你直接执行了代码内的部分逻辑,没有遵循LeetCode的调用流程(LeetCode会先创建Solution实例,再调用sortColors方法),因此没暴露这个问题。
修正后的代码
class Solution(object): def mergesort(self, arr): # 增加self参数 if len(arr) > 1: r = len(arr) // 2 arr1, arr2 = arr[:r], arr[r:] self.mergesort(arr1) # 递归调用添加self self.mergesort(arr2) i = j = k = 0 while i < len(arr1) and j < len(arr2): if arr1[i] > arr2[j]: arr[k] = arr2[j] j += 1 else: arr[k] = arr1[i] i += 1 k += 1 while i < len(arr1): arr[k] = arr1[i] k += 1 i += 1 while j < len(arr2): arr[k] = arr2[j] k += 1 j += 1 def sortColors(self, nums): self.mergesort(nums) # 调用类内方法添加self
内容的提问来源于stack exchange,提问作者Ankit Gupta
相关产品推荐
相关产品推荐

