摘要:之前都提到了几次协程,那么今天就来具体看看到底什么是协程,为什么要有协程,python如何实现协程的。 通过对生成器的学习,我们知道,yield val这行代码会给调用next(gen)的客户端产出一个值,然后暂停,把执行权限移交到客户端那里,等到下次客户端再次调用next(gen)的时候,再从yi
阅读全文
摘要:今天的主题是讨论以下特性: * with语句和上下文管理器 * for、while、try语句的else子句 使用with语句会设置一个临时的上下文,交给上下文管理器对象控制,并负责清理上下文。这么做主要是为了避免样子代码,易于使用。除了自动关闭文件外,with还有很多其他用途。 else子句与wi
阅读全文
摘要:当我在自己的程序中发现用到了模式,我觉得这就表明某个地方出错了。程序的形式应该仅仅反映它所要解决的问题。代码中其他任何外加的形式都是一个信号,(至少对我来说)表明我对问题的抽象还不够深——这通常意味着自己正在手动完成的事情,本应该通过写代码来让宏的扩展自动实现。 ——Paul Graham Lisp
阅读全文
摘要:以前面我们定义过的Vector向量类为例,讨论重载运算符。 运算符重载基础 运算符重载本质上是函数调用。许多面向对象语言都支持运算符重载,如C++,如果使用得当,API会更好用,代码也会更加易于阅读。python也支持运算符重载,只是增加了一些限制: * 不能重载内置类型的运算符 * 不能新建运算符
阅读全文
摘要:今天讨论两个话题 * 子类化内置类型的缺点 * 多重继承和方法解析顺序(__mro__) 许多人都对继承敬而远之。Java不支持多继承,并没有产生什么坏的影响,而C++对多继承的滥用上了很多人的心(笔者也是其中一位)。因此,今天就讨论一下多继承到底是怎么回事。 子类化内置类型很麻烦 直接子类化内置类
阅读全文
摘要:抽象类表示接口。 Bjarne StroustrupC++之父 Python中的接口和协议 引入抽象基类之前,python就已经很成功了,即便现在也很少有代码使用抽象基类。协议可以看成是非正式的接口,是python这种动态语言实现动态的方式。 接口在动态语言中是如何运作的呢?首先,python中除了
阅读全文
摘要:python自带的对象拥有很多有趣的行为,用户自己定义的类对象也可以实现跟python对象相同的行为。 对象的表示形式 python关于对象的表示提供了两种形式: repr() 便于开发者理解的返回对象的字符串形式 str() 便于用户理解的返回对象的字符串形式 也正是对象的__repr__和__s
阅读全文
摘要:实现一个简单的装饰器 定义一个装饰器,它在每次被修饰函数被调用时计时、然后把经过的时间、传入的参数、结果打印出来 需要说明的是,被clock修饰的函数,函数指向的都是clock内部的clocked函数。 @clock def func(...): pass 与func = clock(func)是等
阅读全文
摘要:装饰器用来在不修改原函数代码的情况下,增强该函数的功能。要想熟练掌握装饰器,必须理解闭包。 闭包粗略的讲就是保存有状态的函数,它除了在装饰器中有作用之外,还是回调式异步编程和函数式编程的基础。所以闭包的重要性可想而知。 装饰器基础知识 装饰器就本质而言依然是一个函数,他接收一个函数作为参数,然后返回
阅读全文
摘要:符合模式不代表做得对。 Ralph Johnson《设计模式:可复用面向对象软件的基础》 案例分析:重构策略模式 利用一等对象的函数,能够使得某些设计模式得以简化。策略模式是个很经典的例子,能够用函数重构它来有效的精简代码。 经典的策略模式 摘自《流畅的python》 淘宝、天猫的购物功能就可以使用
阅读全文
摘要:在 Python 中,函数是一等对象。编程语言理论家把“一等对象”定义为满足下述条件的程序实体:• 在运行时创建• 能赋值给变量或数据结构中的元素• 能作为参数传给函数• 能作为函数的返回结果 把函数视为对象 在python中一切皆对象,那么函数自然也是对象。 明白了函数是对象后,就可以使用函数式风
阅读全文
摘要:本人以前就经常搞不清楚utf-8、unicode、字符串、二进制序列、编码、解码这几个之间的关系,趁今天有时间,赶紧写篇文章巩固这几个概念,免得以后又搞混了。 字符串是什么? 字符串就是字符序列,说得更通俗点,一串字符就是字符串。问题在于该如何给字符下定义? 2015年开始,“字符”的最好定义就是U
阅读全文
摘要:字典dict这种数据结构活跃在所有python程序的背后,即便你的程序没有直接使用它。 字典在python里的作用至关重要,python也对其实现做了高度优化,而背后的散列表则是字典性能出众的根本原因,集合可以看成是只含有键,没有值的特殊的字典。 泛映射类型 你一定听过linux里泛文件抽象的概念吧
阅读全文
摘要:Python的序列类型非常丰富,包括了列表(list),元组(tuple),字符串(str), 字节数组(bytes),队列(deque),今天我们就着重了解下python中的这些内置序列类型。 内置序列类型介绍 python标准库中的序列类型使用C语言实现,大体上可分为下面几类。 容器序列 lis
阅读全文