欢迎光临散文网 会员登陆 & 注册

Fluent Python —— Data Model初探

2023-03-05 23:10 作者:Mor_pheus  | 我要投稿

本系列旨在记录自己在阅读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,因为生成器表达式遵循迭代器协议,

它可以逐个产出元素,而不是:先建立一个列表,再将这个列表传递到某个构造函数里。

显然,前者更节省内存。

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

Fluent Python —— Data Model初探的评论 (共 条)

分享到微博请遵守国家法律