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)


你可能感兴趣的:(Python学习)