Python TypeError:sort() 不接受位置参数

我试着写一个小班,想根据重量对项目进行排序。提供了代码,


class Bird:


    def __init__(self, weight):

        # __weight for the private variable

        self.__weight = weight


    def weight(self):

        return self.__weight


    def __repr__(self):

        return "Bird, weight = " + str(self.__weight)



if __name__ == '__main__':


    # Create a list of Bird objects.

    birds = []

    birds.append(Bird(10))

    birds.append(Bird(5))

    birds.append(Bird(200))


    # Sort the birds by their weights.

    birds.sort(lambda b: b.weight())


    # Display sorted birds.

    for b in birds:

        print(b)

当我运行程序时,我得到Python TypeError: sort() takes no positional arguments. 这里有什么问题?


犯罪嫌疑人X
浏览 1035回答 3
3回答

慕神8447489

正是它所说的:sort不接受任何位置参数。它需要一个名为 的仅关键字参数key:birds.sort(key=lambda&nbsp;b:&nbsp;b.weight())从文档:排序(*,键=无,反向=假)此方法对列表进行原地排序,仅使用<项目之间的比较。异常不会被抑制——如果任何比较操作失败,整个排序操作都将失败(并且列表可能会处于部分修改状态)。sort()接受两个只能通过关键字传递的参数&nbsp;(仅关键字参数):key指定一个参数的函数,用于从每个列表元素(例如,key=str.lower)中提取比较键。列表中每一项对应的key被计算一次,然后用于整个排序过程。的默认值None意味着直接对列表项进行排序,而不计算单独的键值。[...]的*签名中的是位置参数和唯一关键字参数之间的隔板;&nbsp;它作为初始“参数”的位置表明缺少位置参数。

智慧大石

查看 的文档list.sort,我们可以看到这key是一个仅限关键字的参数。所以换行birds.sort(lambda b: b.weight())到birds.sort(key=(lambda b: b.weight()))

守着星空守着你

sort()需要一个key参数,没有别的(好吧,它可以接受一个reverse参数)。你提供sort()了一个它不能接受的参数。只需key=在您的之前添加lambda错误消息是因为key采用关键字参数,而不是位置参数。位置参数是后面没有等号和默认值的名称。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python