fluent Python 讀書筆記(一)
阿新 • • 發佈:2019-02-09
從今天開始閱讀這本Python中幾乎是必讀的進階書籍。
第一章:資料模型
1.1 一摞Python風格的紙牌
在這一章中,主要有以下知識點:
1.如何快速利用collections模組建立一個沒有方法的class
import collections
Card = collections.namedtuple('Card',['rank','suit'])
這樣就建立了一個叫Card的類,後面的list對應屬性名,
a = Card('7','hearts')
a.rank = 7
a.suit = hearts
2.用2個for迴圈建立一個listcomprehension
當出現2個for時 指標應該先遍歷所有的self.suits 再 取下一個rank。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]
3.怎樣造一個類,它能迭代,能choice,能用len()求長度
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]
deck = FrenchDeck()
for card in deck:
print(card)
4.in 也是一個迭代
可以輸入類似
Card('Q','hearts') in deck , idle 會給True
5.__getitem__() 賦予你這個例項能訪問資料的能力,也同時就能切片了
6.這個類就像一個list一樣,可以被sorted, 甚至加了key方法的sorted。
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(card)