namedtuple函数:
# collections.namedtuple构建一个简单的类来表示一张纸牌,
# card为类名,rank, suit类似于字典的key
card = collections.namedtuple('card', ['rank', 'suit'])
sorted与spades_high函数:
对于纸牌card(rank='2', suit='clubs')
,spades_high函数返回的值为2x4+0=8,8返回到sorted中,
…
对于纸牌card(rank='2', suit='spades')
,spades_high函数返回的值为2x4+2=11,11返回到sorted中,
对于纸牌card(rank='3', suit='clubs')
,spades_high函数返回的值为3x4+0=12,12返回到sorted中,
…
以此类推到最后一张纸牌,sorted根据每张纸牌spades_high返回的值进行排序,实现升序排序。
suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0)
def spades_high(card):
# index检测字符串ranks中是否包含子字符串card.rank
rank_value = FrenchDeck.ranks.index(card.rank)
return rank_value * len(suit_values) + suit_values[card.suit]
"""
sorted(deck, key=spades_high)详解:
deck运行__len__然后循环deck里面的值传给spades_high,sorted会根据函数spades_high返回的值的大小进行排序
"""
for card in sorted(deck, key=spades_high): # key是排序过程调用的函数,也就是排序依据
print(card)
字符串表示形式:
此处使用%
返回的结果代替%r
代表的对象,此外str.format
也可以格式化字符串
# %函数返回的结果用来代替%r所代表的对象,%r获取对象各个属性的标准字符串表示形式
'Vector(%r, %r)' % (self.x, self.y)