我试着写一个小班,想根据重量对项目进行排序。提供了代码,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
意味着直接对列表项进行排序,而不计算单独的键值。[...]
的*
签名中的是位置参数和唯一关键字参数之间的隔板; 它作为初始“参数”的位置表明缺少位置参数。
守着星空守着你
TA贡献1799条经验 获得超8个赞
sort()
需要一个key
参数,没有别的(好吧,它可以接受一个reverse
参数)。你提供sort()
了一个它不能接受的参数。只需key=
在您的之前添加lambda
错误消息是因为key
采用关键字参数,而不是位置参数。位置参数是后面没有等号和默认值的名称。
添加回答
举报
0/150
提交
取消