【发布时间】:2010-10-20 17:28:37
【问题描述】:
我有一个关于 python 如何处理传递给 sorted() 的方法的问题。考虑以下小脚本:
#!/usr/bin/env python3
import random
class SortClass:
def __init__(self):
self.x = random.choice(range(10))
self.y = random.choice(range(10))
def getX(self):
return self.x
def getY(self):
return self.y
if __name__ == "__main__":
sortList = [SortClass() for i in range(10)]
sortedList = sorted(sortList, key = SortClass.getX)
for object in sortedList:
print("X:", object.getX(),"Y:",object.getY())
输出类似于以下内容:
X: 1 Y: 5
X: 1 Y: 6
X: 1 Y: 5
X: 2 Y: 8
X: 2 Y: 1
X: 3 Y: 6
X: 4 Y: 2
X: 5 Y: 4
X: 6 Y: 2
X: 8 Y: 0
此脚本根据每个实例的 x 字段的值对 SortClass 对象进行排序。但是请注意,sorted 的“key”参数指向 SortClass.getX,而不是任何特定的 SortClass 实例。我对python如何实际使用作为“键”传递的方法有点困惑。像这样调用 getX() 是否有效,因为传递给它的对象与“self”参数的类型相同?这是对“key”参数的安全使用吗?
【问题讨论】:
-
请注意,getter 和 setter 是非 Python 的。您应该改用 operator.attrgetter 来编写它。此处示例:dpaste.com/hold/36126
-
我猜你的意思是:'sortList = [SortClass() for i in range(10)]'
标签: python python-3.x sorted