
python
aisxyz
这个作者很懒,什么都没留下…
展开
-
上下文管理器Context Manager实现原理
python中用with关键字可以创建一个上下文管理器,其为我们带来了很多便利,比如常见的文件的打开关闭操作等,是否觉得它用起来很酷?想不想定义自己的上下文管理器?现在就让我们一起来瞧瞧它的底层实现。其实要定义自己的上下文管理器也很简单,只需要实现两个方法:1、__enter__(self)2、__exit__(self, exc_type, exc_value, tracebac...原创 2016-05-19 08:56:36 · 389 阅读 · 0 评论 -
小议关键字del与实例方法__del__(self)
python中有很多类似于__del__(self)这样的特殊方法,有一些比如 __gt__()、__le__()等等从名字就可猜出其大概功能,但有些却不能这样这样随意猜测(当然也有可能是只有我一人会这样),比如此处即将登场的__del__()和del,以前我以为当del一个对象时,__del__()就会被调用,然而在经历了一次次的笔试失败后,我才开始审查起这些较为细微的地方了 ^_^ !闲话...原创 2016-05-19 09:03:58 · 287 阅读 · 0 评论 -
自定义迭代器iterator
python中迭代器的定义方式主要有两种,一种是通过类实现__iter__()方法,其返回一个实现了__next__()方法的object,如果该类自身实现了__next__(),则只需直接返回self即可,如下是一个拥有逆置功能的类:[code="python"]#创建过程:class Reverse: def __init__(self, data): ...原创 2016-05-20 08:55:24 · 189 阅读 · 0 评论 -
super在多继承中的调用细节
注:此处以python 3为运行环境,例子摘自《python cookbook》第8章。python中若子类要实现父类的初始化,主要有两种方法,第一种是直接通过父类名,第二种是利用super方法。在单继承时两者没什么区别,但在多继承时就需要注意一些细微的差距了。实例解释才是硬道理!1、利用父类名的情况:[code="python"]class Base: def __...原创 2016-08-26 00:08:37 · 198 阅读 · 0 评论 -
反向迭代器
要实现一个反向迭代器其实非常简单,只需实现 __reversed__ 这个特殊方法即可,它会被 python 内置的 reversed 函数所调用。反向迭代器在数据量很多时可以改善代码性能,因为它不需要把数据填充到一个列表中然后再去反向迭代该列表。 下面这个示例是对内置函数 range 的简单模拟:[code="python3"]class Countdown: de...原创 2017-07-27 16:09:37 · 184 阅读 · 0 评论 -
类实例属性的设置与访问
Python 作为动态编程语言,可以在任意时刻为一个类实例设置属性,如果不加限制,则可以为一个实例属性设置任意类型的值。但有时我们可能希望对一个新的实例属性的值进行一些自定义的限制或更改,此时就可从 Python 的类定义层面进行考虑了。 其实细细追究下来,Python 中对一个类实例的属性就行访问和设置主要是跟下面 3 个特殊方法有关: 1、__getattr__(s...原创 2017-07-31 10:48:03 · 566 阅读 · 0 评论 -
python2和python3的pip冲突解决
对于学习python的人来说,python2和python3必不可少,但当同时安装了两者后,又会带来一些冲突问题,比如shell中输入python,shell就会以最先在环境变量中找到的python为准,这样很多情况下并非是我们所想。而很多人的解决办法是修改其中一个python.exe的名字,比如修改为python2.exe之类。这样做的确解决了输入python所带来的冲突问题,但这同时也...原创 2017-03-16 11:53:46 · 764 阅读 · 1 评论