Fluent Python —— Data Model初探
本系列旨在记录自己在阅读Fluent Python一书过程中的问题和思考。

什么是Data Model?
数据模型,其实是对Python自身框架的描述,它规范了这门语言构建自身模块的接口。
比如构建上下文管理器,会涉及到__enter__和__exit__方法,构建一个可变序列时,
会涉及到__setitem__,__delitem__,__iadd__等方法。它们一步一步逐层抽象,最后
变成我们更为熟知,同时使用起来也更方便的如len()、abs()等方法。

内置序列类型概览
按容纳类型:
容器序列
list、tuple、collections.deque,这些序列能存放不同类型的数据。
容器序列中存放的实际上是任意类型的引用。
扁平序列
str、bytes、bytearray、memoryview和array.array等,这些只能容纳一种类型。
扁平序列中存放的是值,其实它是一片连续的内存空间,因此也就显得更加紧凑。
按是否可修改:
可变序列和不可变序列。顾名思义,不再赘述。

Listcomps & Genexps
这俩可以说是非常Pythonic风格的“黑魔法”。在日常写代码的时候,如果多用列表推导式和
生成器表达式,那么将会大大提高代码的可读性,并且也能提高运行速度。
以下示例摘自Fluent Python:
如果用 listcomps的风格,一行代码搞定!

Genexps的语法和Listcomps的语法很类似,区别在于一个是中括号,一个是小括号。
但是这二者来说,Genexps要更优于Listcomps,因为生成器表达式遵循迭代器协议,
它可以逐个产出元素,而不是:先建立一个列表,再将这个列表传递到某个构造函数里。
显然,前者更节省内存。

下期,继续探究内置序列类型——元组