Python TypeError:sort()不带位置参数
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
的错误堆栈。这是什么问题?
正是它所说的:sort
不采取任何位置论证。它需要一个名为key
的仅关键字参数:
birds.sort(key=lambda b: b.weight())
sort(*,key = None,reverse = False)
此方法仅使用项目之间的
<
比较对列表进行排序。不会禁止异常 - 如果任何比较操作失败,整个排序操作将失败(并且列表可能会处于部分修改状态)。
sort()
接受两个只能通过关键字传递的参数(仅限关键字参数):key指定一个参数的函数,该函数用于从每个列表元素中提取比较键(例如,
key=str.lower
)。对应于列表中每个项目的密钥计算一次,然后用于整个分类过程。None
的默认值表示直接对列表项进行排序,而不计算单独的键值。[...]
签名中的*
是位置参数和仅关键字参数之间的分隔符;它作为初始“参数”的位置表明缺乏位置参数。
查看list.sort
的文档,我们可以看到key
是一个仅关键字参数。所以换行
birds.sort(lambda b: b.weight())
至
birds.sort(key=(lambda b: b.weight()))
sort()
采取key
论点,没有别的(好吧,它可以采取reverse
论点)。你向sort()
提供了一个它无法接受的论据。只需在key=
之前添加一个lambda
错误消息是因为key
接受关键字参数,而不是位置参数。位置参数是一个名称,后面没有等号和默认值。
以上是关于Python TypeError:sort()不带位置参数的主要内容,如果未能解决你的问题,请参考以下文章
无法在python中调用类函数(TypeError:object()不带参数)
Python kivy:如何修复“TypeError:object.__init__() 不带参数”?
Pytorch,TypeError:object()不带参数
Django异常中间件:TypeError:object()不带参数