0%

在 Python 中,数据属性和处理数据的方法统称为属性(attribute)。其实方法只是可调用的属性。除了这二者外,还可以创建特性(property),在不改变类接口的前提下,使用存取方法(即读值和设值方法)修改数据属性。这与统一访问原则相符:不管服务是由存储和计算实现的,一个模块提供的所有服务都应该通过统一的方式使用。

阅读全文 »

yield 对于 Python 来说,有两个含义:

  • yield item 会产生一个值,提供给 next(…) 的调用方
  • 此外还会做出让步,暂停执行生成器,让调用方继续工作,直到需要使用另一个值时再调用 next()。调用方会从生成器中拉取值

从语法上来看,协程与生成器都是类似的,都是定义体中包含 yield 关键字的函数。但是在协程中,yield 通常出现在表达式的右边,可以产出值,也可以不产生。如果 yield 关键字后面没有表达式,那么生成器产出 None。协程可能会从调用方接收数据,调用方把数据提供给协程使用的是 .send(datum) 方法,而不是 next(…) 函数。通常调用方会把值推送给协程。

阅读全文 »

这里讨论 Python 用户往往会忽视或者没有充分使用的几个特性,包括:

  • with 语句和上下文管理器
  • for、while 和 try 语句的 else 子句

with 语句会设置一个临时的上下文,交给上下文管理器对象控制,并负责清理上下文。这样做能够避免错误并减少样板代码,因此 API 更安全且易于使用。

阅读全文 »

程序中的形式应该仅仅反映它所要解决的问题,代码中的其他任何外加形式都是一个信号,表明对问题的抽象还不够深。迭代是数据处理的基石。扫描内存中存不下的数据集时,需要找到一种惰性获取数据项的方式,即按需一次获取一个数据项。这就是迭代器模式。

阅读全文 »

这篇文章将讨论接口:从鸭子类型的代表特征-动态协议,到使用接口更明确、能验证实现是否符合规定的抽象基类(Abstract Base Class,ABC)。抽象基类与描述符和元类一样,是用于构建框架的工具,一般都不需要自己编写抽象基类,因为很容易过度设计。

阅读全文 »

这篇文章主要介绍 Python 的面对对象惯用法,首先介绍对象与对象名称的区别,解释对象标识、值和别名等概念,以及垃圾回收、del 命令、如何通过弱引用记住对象,而无需对象本身存在。最后会介绍符合 Python 风格的对象。

阅读全文 »

函数装饰器用于在源码中标记函数,以某种方式增强函数的行为。这是一项强大的功能,若想彻底掌握它,首先必须理解闭包。除了在装饰器中有用处之外,闭包还是回调式异步编程和函数式编程风格的基础。

阅读全文 »