【学习笔记】python 进阶特性

__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

相关文章
相关标签/搜索