首页 > 解决方案 > 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. 这里有什么问题?

标签: pythonpython-3.xclasssortingarguments

解决方案


正是它所说的:sort不接受任何位置参数。它接受一个名为 的仅限关键字的参数key

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

文档中:

排序(*,键=无,反向=假)

此方法仅使用<项目之间的比较对列表进行排序。异常不会被抑制 - 如果任何比较操作失败,整个排序操作将失败(并且列表可能会处于部分修改状态)。

sort()接受两个只能通过关键字传递的参数 (仅关键字参数):

key指定一个参数的函数,用于从每个列表元素中提取比较键(例如,key=str.lower)。列表中每一项对应的键计算一次,然后用于整个排序过程。默认值None表示列表项直接排序,不计算单独的键值。

[...]

签名中的*是位置参数和仅关键字参数之间的分隔符;它作为初始“参数”的位置表明缺少位置参数。


推荐阅读