读书笔记(一)"/>
fluent Python 读书笔记(一)
从今天开始阅读这本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
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]
当出现2个for时 指针应该先遍历所有的self.suits 再 取下一个rank。
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)
更多推荐
fluent Python 读书笔记(一)
发布评论