【流畅的python】笔记一:

近期闲来无事,准备将【流畅的python】一书翻完。

不定期会有工作任务来临,因此时间很紧,尽我能吸收的最大速度过一遍。年龄大了,时间稍微一长就会遗忘,留此待回忆吧!

争取书中代码全部手工过一遍!

开工!!!

1.特殊方法:

__getitem__  和  __len__

比如:len(content)  实际执行 content.__len__

        obj[key] 实际执行  obj.__getitem__

==================================================

一个纸牌类:

card = collections.namedtuple('car',['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):
         return self._cards[position]

=================================================

import collections: --------collecions模块 :

1、计数器:Counter

2、双向队列:deque

3、默认字典:defaultdict

4、有序字典:OrderedDict

5、可命名元组:namedtuple

string.split()   切片  split() 以空格及 切片

from random import choice    随机选取

【尽可能使用python标准库,避免重新发明轮子】


deck = FrenchDeck()

deck类自动支持切片slicing操作。

deck[:3]  查看最上面的3张牌

输出:[card(rank='2', suit='spades'), card(rank='3', suit='spades'), card(rank='4', suit='spades')]

deck[12::13] 查看‘A’的牌,查看序号为12的牌,每个13张拿1张

输出:[card(rank='A', suit='spades'), card(rank='A', suit='diamonds'), card(rank='A', suit='clubs'), card(rank='A', suit='hearts')]


特殊方法的存在,是为了被Python解释器使用,我们不需要调用它们。除非有大量的元编程存在,直接调用特殊方法的频率应该远低于你去实现它们的次数。唯一常用的是__init__方法,其目的是在你自己的子类的__init__方法中去调用超类的构造器。

不要想当然的随意添加特殊方法。

原文地址:https://www.cnblogs.com/tendercool/p/14241267.html