Python中的合并排序函数返回错误

Python中的合并排序函数返回错误,python,mergesort,Python,Mergesort,我尝试编写了一个合并排序函数,如下所示。但当我尝试测试它时,我收到一个错误: 未定义名称mergesort 有人能指出这个错误的原因吗 def merge(self,a,b): sorted_list=[] while len(a)!=0 and len(b)!=0: if a[0].get_type()<b[0].get_type(): sorted_list.append(a[0]) a.r

我尝试编写了一个合并排序函数,如下所示。但当我尝试测试它时,我收到一个错误:

未定义名称mergesort
有人能指出这个错误的原因吗

    def merge(self,a,b):

    sorted_list=[]

    while len(a)!=0 and len(b)!=0:

        if a[0].get_type()<b[0].get_type():
            sorted_list.append(a[0])
            a.remove(a[0])
        else:
            sorted_list.append(b[0])
            b.remove(b[0])
    if len(a)==0:
        sorted_list+=b
    else:
        sorted_list+=a

    return sorted_list

def mergesort(self,lis):

    if len(lis) == 0 or len(lis) == 1:
        return lis
    else:
        middle = len(lis)// 2
        a = mergesort(lis[middle:]) #in pycharm the next 3 lines are with red underlined
        b = mergesort(lis[middle:])
        return merge(a,b)
def合并(self、a、b):
已排序的_列表=[]
而len(a)=0和len(b)=0:

如果一个[0].get_type(),
self
是这些方法的参数之一,这意味着它们很可能是类的一部分(您在文章中省略了这个类)

如果这是正确的,您需要使用
self.mergesort(l)
调用,其中
l
是一个列表

为了预防您将发现的下一个错误,出于类似的原因,您需要将
返回合并(a,b)
替换为
返回自合并(a,b)


最后,我必须问一下,为什么要将所有这些函数定义为类的方法。他们似乎不依赖任何共享数据。您确信它们不会在模块范围内更恰当地声明吗?

请更正缩进。您有一堆奇怪的
self
参数。这些应该是类的方法吗?是的,它们是类的方法,那么类在哪里?请提供格式正确的。您正在列表的同一侧应用合并排序
a=self.mergesort(lis[middle:])
b=self.mergesort(lis[middle:])