Python
oyw5201314ck
这个作者很懒,什么都没留下…
展开
-
metaclass元类
在Python中一切皆为对象,class(类)作为模板同样也是对象。我们可以通过type在运行期间动态创建类,同样我们也可以通过metaclass(元类)来控制类的创建过程。简言之,我们可以先定义metaclass,然后使用它来创建(或者修改)class,这个class可以看成metaclass的实例,有点绕。下面我们使用metaclass来为我们自定义的MyString添加一个len方法:cla...原创 2018-03-16 19:05:58 · 250 阅读 · 0 评论 -
pdb调试
以前调试的时候,习惯用异常处理和print/logging输出信息的方式来进行。最近接触到一种新的调试方法,就是使用python自带的模块pdb(类比c的gdb)。1.python -m pdb <待执行py脚本>,进入pdb调试环境,进行单步执行2.import pdb 在待调试的地方插入pdb.set_trace() 设置断点,当程序执行至此,会暂停并进入pdb调试环境...原创 2018-03-16 20:06:07 · 231 阅读 · 0 评论 -
可迭代对象Iterable、迭代器Iterator
如果一个对象实现了__iter__方法,那么就是可迭代的IterablePython的collections模块提供了Iterable和Iterator这两个抽象类,可以让我们检测一个对象是否是可迭代的以及是否是迭代器In [16]: class MyIterable(object): ...: def __iter__(self): ...: return...原创 2018-03-18 11:16:18 · 370 阅读 · 0 评论 -
生成器generator
Python提供了一个高级特性: 生成器,顾名思义,生成器就是不断生成结果的对象;那生成器有什么好处呢?假设我们现在需要对1亿以内的正整数做一个统计操作,那如果我们一次生成这么多整数,势必需要占用很大的内存空间,但是我们一次生成一个整数,然后下一次生成下一个整数,那么就只需要很少的内存即可,这里就是生成器的用武之地。生成器在惰性计算或者延迟处理的场景下非常有用,也即需要的时候才会产生结果,而不是一...原创 2018-03-18 11:36:07 · 402 阅读 · 0 评论 -
多重继承
Python支持多重继承,但是多重继承势必会造成很多问题,譬如二义性;举栗子,假设类A继承类B和类C,类B和类C都实现了foo()方法,那么类A的实例对象在调用foo方法时, 是调用类B还是类C中的foo呢?Python中用于解决这种问题的算法就是MRO(Method Resolution Order),即方法解析顺序。很多文章中都讲了Python的MRO算法发展历史,包括Python2.2以前的...原创 2018-03-21 21:22:03 · 166 阅读 · 0 评论