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 。这里有什么问题?

原文由 Arefe 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 3.1k
2 个回答

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

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

文档 中:

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

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

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

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

[…]

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

原文由 chepner 发布,翻译遵循 CC BY-SA 4.0 许可协议

查看 list.sort 的文档,我们可以看到 key 是一个仅限关键字的参数。所以换行

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

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

原文由 mostsquares 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题