为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

犯罪嫌疑人X 2021-12-16 14:58:00
我试着写一个小班,想根据重量对项目进行排序。提供了代码,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. 这里有什么问题?
查看完整描述

3 回答

?
慕神8447489

TA贡献1780条经验 获得超1个赞

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

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

文档

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

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

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

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

[...]

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


查看完整回答
反对 回复 2021-12-16
?
智慧大石

TA贡献1946条经验 获得超3个赞

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

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

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


查看完整回答
反对 回复 2021-12-16
?
守着星空守着你

TA贡献1799条经验 获得超8个赞

sort()需要一个key参数,没有别的(好吧,它可以接受一个reverse参数)。你提供sort()了一个它不能接受的参数。只需key=在您的之前添加lambda

错误消息是因为key采用关键字参数,而不是位置参数。位置参数是后面没有等号和默认值的名称。


查看完整回答
反对 回复 2021-12-16
  • 3 回答
  • 0 关注
  • 1033 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信