课程名称: python必学模块-collections
课程章节: deque + Counter + OrderedDict + ChainMap
课程讲师: bobby
课程内容:
deque:双端队列
- 特点:C写的,性能高
- 初始化:deque(iterable)
- list:[].pop()方法,可以弹出尾部元素
- dequeue
- appendleft:添加元素到队列头部
- clear:清空数据
- copy:返回一个浅拷贝(只拷贝里面的不可变元素)
- 深拷贝:import copy; copy.deepcopy()
- extend:将两个deque合并成一个,修改调用方法的那个deque
- insert:插入元素
- reverse:元素翻转
- 魔法函数:就是python的协议,是python的解释器直接可以调用的函数
- 应用场景:
- Queue:python中的队列,底层就是deque
- deque:是线程安全的,被GIL保护(list非线程安全)
Counter
- 作用:对iterable做统计的
- 使用:
- Counter(xxxlist)
- Counter(xxxstr)
- .update(待合并统计的str)
- .most_common(2):统计出出现top2的元素
- 实现:用了_heapq.nlargest方法,堆的方法,性能比遍历高很多
- 本质:dict的子类
OrderedDict
特点:
- dict的子类
- 以kv添加顺序为顺序(dict在py3中也有序,但在py2中无序)
其他函数: - popitem:最后一个kv弹出
- pop(key):弹出指定的kv
- move_to_end(key):移动kv顺序
ChainMap
想遍历多个dict,一般需要写多个for循环
ChainMap可以把多个dict链接起来,进行遍历
目的是访问多个dict的时候,像访问一个dict一样操作的方便
- cm = ChainMap(dict1, dict2)
- 特点:多个dict中的相同key,遍历的时候只出现第一个key-v对儿
方法: - new_chile(dict3, dict4) - 增加两个dict
- chain_map.maps -> 返回个list指向里面的两个dict
课程收获:
collection模块补充了下,Counter比较有用,其他的用到的时候能想起来就行。嗯。
下节课学这个
Py3 进阶
重载内建方法
举例:print(xxx)的本质是什么?
- 调用了xxx对象的__str__()方法,类似其他语言里面的desc方法
特殊方法的特点:被__包裹
add()、len()…
所以系统函数的本质,都是调用了对象的内建方法。
查看内建方法:dir(对象)可以料想,dir本身应该也是个内建方法
- __str__重写掉,可以print出想要内容
- __repr__展示给开发者看的描述内容,represent,直接在控制台输出
- __slots__用于限制需要对象添加的属性(写死属性)
__slots__ = ('name', 'gender', 'score')
- __call__函数的本质是可调用对象,而可调用对象的本质是重载了这个内建方法
Person('Bob', 'Male')()
重写了这个对象的__call__,这个对象就是一个可调用对象了(如果重写的时候__call__返回这个对象本身,那么就可以在后面无限写括号了p()()()()()()()()233333)
包和模块
模块导入,需要考虑解释器的模块搜索路径问题。
sys.path -> 显示解释器搜索路径
- ’ ’ ->当前路径
函数式 & 高阶函数
map
map(func, list)