在 Python 中,数据属性和方法统称属性(attribute)。其实,方法是可调用的属性。动态属性(dynamic attribute)的接口与数据属性一样(obj.attr),不过按需计算。这与 Bertrand Meyer 所说的统一访问原则(Uniform Access Principle)相符。
流畅的 Python 第 2 版(21):异步编程
这篇文章将介绍 Python 中的异步编程,这些内容建立在之介绍的可迭代对象和生成器、上下文管理器、以及并发编程一般概念等基础之上。
流畅的 Python 第 2 版(20):并发执行器
对于线程,应用程序开发者遇到的使用场景,99% 的情况下只需知道如何派生一堆独立的线程,然后用队列收集结果。这篇文章讨论实现了 concurrent.futures.Executor 接口的类,这些类对上面这种使用场景进行了封装,使用起来特别容易,不仅能用于线程,而且还能用于进程处理计算密集型任务。同时还会介绍 future,这种对象表示异步执行的操作,类似于 JavaScript 中的 promise。
流畅的 Python 第 2 版(19):Python 并发模型
并发指同时处理多件事,并行指同时做多件事。二者不同,但有联系。一个关于结构,一个关于执行。并发用于制定方案,用来解决可能(但未必)并行的问题。并行是并发的一种特殊情况。所有并行系统都是并发的,但不是所有并发系统都是并行的。
这篇文章将展示 Python 的 3 种并发方式:线程、进程和原生协程。
流畅的 Python 第 2 版(18):with、match 和 else 块
这篇文章学习一些在其他语言中不常见的控制流功能,包括 with 语句和上下文管理器协议,匹配模式的 match/case 以及 for、while 和 try 语句中的 else 子句。
流畅的 Python 第 2 版(17):迭代器、生成器和经典协程
迭代是数据处理的基石:程序将计算应用于数据序列。如果数据在内存中放不下,则需要惰性获取数据项,即按需一次获取一项,这就是迭代器的作用。
流畅的 Python 第 2 版(16):运算符重载
一门易于使用的高级语言,再加上支持运算符重载,这或许是 Python 在数据科学领域(包括金融和科学应用程序)取得巨大成功的关键原因。这篇文章将学习 Python 的运算符重载机制。
流畅的 Python 第 2 版(15):类型提示进阶
惨痛的教训告诉我,对于小型程序,动态类型就够了,而大型程序则需要更规范的方式。如果语言能做出规范,那么当然比 放任自流 要好。这篇文章我们将继续讲解 Python 的渐进式类型系统。
流畅的 Python 第 2 版(14):继承:瑕瑜互见
这篇文章将探讨继承和子类化,重点讲解 super()、多重继承和方法解析顺序 和 混入类 等 Python 特色功能。
流畅的 Python 第 2 版(13):接口、协议和抽象基类
面向对象设计第一原则是 对接口编程,而不是对实现编程。在 Python 中,支撑一个类型的是它提供的方法,也就是接口。在不同的编程语言中,接口的定义和使用方式不尽相同。