Fluent Python-1(collections.namedtuple & 魔術方法的使用)
- 2019 年 10 月 7 日
- 筆記
版權聲明:本文為部落客原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
本文鏈接:https://blog.csdn.net/y_silence_/article/details/101126740
涉及知識點
- collections — Container datatypes
- collections.namedtuple
- 特殊方法
- 切片操作
- 反向迭代
- 排序函數(sorted)
程式碼
import collections # collections — Container datatypes # namedtuple() Factory Function for Tuples with Named Fields Card = collections.namedtuple('Card', ['rank', 'suit']) class FrenchDeck: ranks = [str(n) for n in range(2, 11)] + list('JQKA') suits = 'spades diamonds clubs hearts'.split() def __init__(self): self._cards = [Card(rank, suit) for suit in self.suits for rank in self.ranks] def __len__(self): return len(self._cards) def __getitem__(self, position): return self._cards[position] beer_card = Card('7', 'diamonds') print('beer_card', beer_card) # 通過特殊方法 __getitem__ 進行取值 deck = FrenchDeck() print('deck[-1]', deck[-1]) # 切片操作獲取值,通過特殊方法 __getitem__ 進行取值 print('deck[:3]', deck[:3]) # 獲取最前面 3 張牌 print('deck[12::13]', deck[12::13]) # 抽出索引為 12 的那張牌,然後每隔 13 張牌拿一張 # 反向迭代 for card in reversed(deck): print('card_reversed', card) # 排序撲克 suit_values = dict(spades=3, hearts=2, diamonds=1, clubs=0) # 生成排序字典 def spades_high(card): rank_value = FrenchDeck.ranks.index(card.rank) return rank_value * len(suit_values) + suit_values[card.suit] for card in sorted(deck, key=spades_high): print('spades_high,card', card)
參考資料
- Fluent Python
- Python 官方文檔
總結
「等到用到的時候我再去學。」 可以學的東西就被局限到你需要用到這個條件下
。