前言
A Guide to Python’s Magic
Methodspython的绝大多数这样的特殊方法都
在这里面被提到了. 今天我来说3个他没有提到的[dir, slots, weakref],
再强调下他提到的2个[missing, contains]
dir -> 看个小例子就知道了
1 |
|
1 |
|
看出来了把, 不解释, 但是这个dir是相对于类的实例有效果的.
slots
这个在我初学python的时候就被模糊了, 原来的理解是它的出现替代了dict,也就是说你只能给slots
这个变量列表项的属性赋值. 对外的接口减少了,也安全了. 后来看了这篇Saving 9 GB of RAM with Python’s
slots.
好久不做运维了,在生产环境究竟怎么样我无法定论, 也提到了,在对象实例很多的时候他能帮助减少内存,
详见<https://www.safaribooksonline.com/library/view/python-
cookbook-3rd/9781449357337/ch08s04.html>.
这里来个小实验(在Hacker News也被讨论过https://news.ycombinator.com/item?id=6750187)
代码例子(我对细节做注释):
1 |
|
结果对比:
1 |
|
结果很明显,内存占用减少了很多…
weakref 弱引用
首先先说下weakref:
弱引用,与强引用相对,是指不能确保其引用的对象不会被垃圾回收器回收的引用。一个对象若只被弱引用所引用,则被认为是不可访问(或弱可访问)的,并因此可能在任何时刻被回收.
在Python中,当一个对象的引用数目为0的时候,才会被从内存中回收. 但是被循环引用呢?
1 |
|
好吧, 我的总结是弱引用是个好东西, 但是加了slots就不支持弱引用了. 所以需要weakref
1 |
|
contains 判断某值 in/not in 实例
1 |
|
missing
最初看这个特殊方法是看python标准库的源码的时候(collections#L421):
1 |
|
什么意思呢?
1 |
|
很多人可能看过这个(关于defaultdict的ppt)[http://discorporate.us/jek/talks/defaultdict/].
内容就不说了, 讲的非常好.
版权声明:本文由 董伟明 原创,未经作者授权禁止任何微信公众号和向掘金(juejin.im)转载,技术博客转载采用 保留署名-非商业性使用-禁止演绎 4.0-国际许可协议
python