第一部分:序幕
第1章:Python数据模型
通过实现特殊方法,自定义数据类型可以表现得和内置类型一样;
__repr__方便调试和记录日志,__str__方便用户看;
序列数据类型特殊方法使用最多;
第二部分:数据结构
第2章:序列构成的数组
系列类型可分为 可变和不可变、扁平序列和容器序列;
列表推导生成器表达式提供了灵活构建和初始化序列的方式;
元组、切片、array.array、collections.deque。。。
第3章:字典和集合
字典算是Python的基石;除dict外,有其他好用的如defaultdict、OrdereDict、ChainMap、Counter(属于collections模块);
映射类型两个方法:setdefault、update
映射类型API中:__missing__
dict、set背后的散列表效率很高;
第4章:文本和字节序列
一个字符不等于一个字节;
二进制数据类型:bytes、bytearray、memoryview;UnicodeEncodeError、UnicodeDecodeError、SyntaxError;
第三部分:把函数视作对象
第5章:一等函数
把函数赋值给变量、传给其他函数、存储在数据结构中、访问函数的属性;
高阶函数、列表推导、规约函数;
python有7中可调用对象,从lambda表达式创建的简单函数到实现__call__方法的类实例;
第6章:使用一等函数实现设计模式
可使用一等函数简化模式实现;
第7章:函数装饰器和闭包
参数化装饰器基本上都涉及至少两层嵌套函数;
要理解装饰器,需要区分导入时和运行时、知道变量作用域、闭包和新增的nonlocal声明;
第四部分:面向对象惯用法
第8章:对象引用、可变性和垃圾回收
每个Python对象都有标识、类型和值;
变量保存的是引用;
CPython中对象的引用计数归零后会被立即销毁;
第9章:符合Pyhton风格的对象
简洁胜于复杂;
使用__slots__节省内存;
要构建符合Python风格的对象,就要观察真正的Python对象;
第10章:序列的修改、散列和切片
myseq[a:b:c]原理:创建slice(a, b, c)对象,交给__getitem__方法处理;
模仿Python标准对象行为;
第11章:接口:从协议到抽象基类
抽象基类动态特性:虚拟子类、使用__subclasshook__方法动态识别子类;
第12章:继承的优缺点
内置类型的原生方法使用C语言实现,不会调用子类中覆盖的方法,极少数例外;
多重继承是双刃剑;__mro__类属性中蕴藏方法解析顺序;
第13章:正确重载运算符
进制重载内置类型的运算符,而且限于重载现有的运算符(is、and、or、not例外);
第五部分:控制流程
第14章:可迭代对象、迭代器和生成器
iter函数;
第15章:上下文管理器和else模块
上下文管理器和with:管理文件,其他用途、、
contextlib模块里的函数,@contextmanager装饰器
第16章:协程
通过客户调用.send(...)方法发送数据或使用yeild from结构驱动的生成器函数;
第17章:使用期物处理并发
concurrent.futures,asyncio.Future;
多线程和多进程并发的底层实现;
第18章:使用asyncio包处理并发
使用yeild from、协程、期物和asyncio时间循环做并发编程;
第六部分:元编程
第19章:动态属性和特性
动态属性编程;
使用特性处理删除属性;
第20章:属性描述符
托管属性和存储属性;
描述符类与使用函数式编程方式构建的特性工厂函数;
第21章:类元编程
类元编程指动态创建类或定制类;
抽象基类、元类;