私はpythonがsorted()に渡されたメソッドをどのように扱うかについて質問します。python3はsorted()の "key"引数に渡されたメソッドで何をしますか?
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オブジェクトを並べ替え:
#!/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())
次のような出力が得られます。以下の小さなスクリプトを考えてみましょう。ただし、ソートされた「キー」引数は、SortClassの特定のインスタンスではなく、SortClass.getXを指すことに注意してください。私はちょっと、Pythonが実際に "キー"として渡されたメソッドをどのように使用するかについて混乱しています。渡されたオブジェクトが "self"引数と同じ型であるため、getX()をこのように呼び出すことはできますか?これは「鍵」議論の安全な使用ですか?
注意ゲッターとセッターがunpythonicあること。代わりにoperator.attrgetterを使用して記述してください。ここでの例:http://dpaste.com/hold/36126/ – nosklo
私は 'sortList = [Sortin](範囲内のSortClass())' –