__slots__
魔法在Python中,每一个类都有实例属性。默认状况下Python用一个字典来保存一个对象的实例属性。这很是有用,由于它容许咱们在运行时去设置任意的新属性。java
然而,对于有着已知属性的小类来讲,它多是个瓶颈。这个字典浪费了不少内存。Python不能在对象建立时直接分配一个固定量的内存来保存全部的属性。所以若是你建立许多对象(我指的是成千上万个),它会消耗掉不少内存。
不过仍是有一个方法来规避这个问题。这个方法须要使用__slots__
来告诉Python不要使用字典,并且只给一个固定集合的属性分配空间。编程
相似java反射。app
自省(introspection),在计算机编程领域里,是指在运行时来判断一个对象的类型的能力。它是Python的强项之一。Python中全部一切都是一个对象,并且咱们能够仔细勘察那些对象。Python包含了许多内置函数和模块来帮助咱们。函数
dir/type/id 内置函数spa
inspect 模块code
Collections
)defaultdict: 与dict相比的优势:单层key赋值无需检查key存在(须要在赋值前判断是否存在指定key等):对象
from collections import defaultdict colours = ( ('Yasoob', 'Yellow'), ('Ali', 'Blue'), ('Arham', 'Green'), ('Ali', 'Black'), ('Yasoob', 'Red'), ('Ahmed', 'Silver'), ) favourite_colours = defaultdict(list) for name, colour in colours: favourite_colours[name].append(colour) # 这里无需判断 name 是否存在,另外一种状况遍历的时候无需区分第一次赋值仍是后续赋值(这俩种状况有些许不一样) print(favourite_colours)
嵌套key使用特殊方法避免KeyError:blog
import collections tree = lambda: collections.defaultdict(tree) some_dict = tree() some_dict['colours']['favourite'] = "yellow"deque
namedtuple