我有一個關於python如何處理傳遞給sorted()的方法的問題。請看下面的小腳本:python3對傳遞給sorted()的「key」參數的方法做了什麼?
#!/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對象。但是,請注意,排序的「鍵」參數指向SortClass.getX,而不是SortClass的任何特定實例。我有點困惑,因爲python實際上如何使用作爲「key」傳遞的方法。像這樣調用getX()是否工作,因爲傳遞給它的對象與「self」參數的類型相同?這是對「關鍵」參數的安全使用嗎?
注意getter和setter方法是unpythonic。你應該用operator.attrgetter來寫這個。示例:http://dpaste.com/hold/36126/ – nosklo 2009-04-21 03:44:14