我尝试编写一个小类,并希望根据权重对项目进行排序。提供了代码
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
的错误堆栈。有什么问题吗?在
查看^{} 的文档,我们可以看到
key
是一个仅限关键字的参数。所以改变路线birds.sort(lambda b: b.weight())
到
birds.sort(key=(lambda b: b.weight()))
确切地说:
sort
不接受任何位置参数。它接受名为key
的纯关键字参数:从documentation:
签名中的
*
是位置参数和关键字参数之间的分隔符;它作为初始“参数”的位置表示缺少位置参数。在sort()
接受一个key
参数,而没有其他参数(好吧,它可以接受一个reverse
参数)。您为sort()
提供了它无法接受的参数。只需在您的lambda
之前添加一个key=
错误消息是因为
key
采用关键字参数,而不是位置参数。位置参数是后面不跟等号和默认值的名称。在相关问题 更多 >
编程相关推荐