collections模块

tuple的功能

只有可哈希的对象才可以作为字典的key,而immutable的对象是可哈希的

 

tuple的拆包,分别进行映射

拆包的灵活用法

tuple的不可变不是绝对的 

nametuple的详解 

__slots__是用于限制class里面有那些属性值的,可以自行去了解一下

from collections import namedtuple
User = namedtuple("User",["name","age","height","edu"])#实际上是创建一个类
#nametuple比class节省空间,少了部分内置的变量,内存和效率都比较高


user = User(name = "Akebi",age = 15,height= 158,edu="namei")#直接关键字传参
print(user.name,user.age,user.height,user.edu)


name_tuple = ("Akebi",15,158)#也可以使用元组来进行传参
user = User(*name_tuple,edu="namei")#*元组进行传参,简化了代码
print(user.name,user.age,user.height,user.edu)



#字典传参,关键字传参要加 “ ”
name_dict ={
    "name" :"Komichi",
    "age" : 14,
    "height" : 158
}
user = User(**name_dict,edu="namei")#键值传参是**
print(user.name,user.age,user.height,user.edu)

#利用nametuple内置函数_make()来实现初始化
user_tuple = ("Akebi",15,158,"namei")#缺陷是每一个具体的值都要列出来
user_list = ["Akebi",15,158,"namei"]#缺陷是每一个具体的值都要列出来
user_dict ={#dict也是可迭代的对象
    "name" :"Komichi",
    "age" : 14,
    "height" : 158,
    "edu" : "namei"
}
user = User._make(user_tuple)#_make()要传递一个itrable对象
user = User._make(user_list)
user = User._make(user_dict.values())#这里要拿dict的values进行迭代
print(user.name,user.age,user.height,user.edu)

#nametuple的内置函数_asdict()将tuple转换成dict
user_info_dict = user._asdict()
print(user_info_dict)#type:OrderDict
print(type(user_info_dict))

#nametuple实现拆包
name,age,*other = user
print(name,age,*other)

#函数传参的两种方式
# def Akebi(*args,**kargs):
#     pass
# Akebi("Komichi",14)传入的参数都属于*args
# Akebi(name = "Komichi",age = 14)传入的参数都属于**kargs

defaultdict功能详解 

defaultdict是用C语言来实现的

优化计数算法
使用dict内置函数setdefault()进行优化,key不存在会自动添加
默认值为0,比上面的if...in..更加高效,少做一次查询

 

将算法进行彻底的优化
key不存在的话会默认初始化为0

实现字典嵌套

函数也是可调用对象 

deque功能详解

双端队列,用C语言写的,性能比较高

浅拷贝
​​​​​
from collections import deque
user_deque = deque(["akebi1",["akebi2","akebi3"],"akebi4"])
user_deque2  = user_deque.copy()
##浅拷贝
user_deque2[1].append("akebi5")#如果修改的元素是列表或其他数据类型时,则被复制的deque也会改变(user_deque跟着变)
user_deque2[0] = "akebi0"#但如果修改的是字符串元素,那么被复制的deque数据不变

#而python自带的深拷贝则不会影响被拷贝的数据
#import copy #user_deque2 = copy.deepcopy(user_deque)

print(user_deque,user_deque2) 

---------------------------------------------------------------------------------------------------------------------------------

 

魔法函数更加正规的叫法是python协议 

魔法函数跟类本身没有什么关系,是python解释器直接可以调用的函数

deque是线程安全的(GIL全局解释器锁),list不是线程安全的

counter功能详解

用于统计数据

counter本身继承的是dict

合并操作

top n问题

解释:"堆"   ,  数据结构

 

OrderedDict功能详解 

但python3中的dict默认也是有序的
而python2的dict是无序的

ordereddict主要是3个函数

popitem,pop,move_to_end 

 

chainMap功能详解

user_dict1 = {"a":"akebi1","b":"akebi2"}
user_dict2 = {"c":"akebi3","d":"akebi4"}
for a , b in user_dict1.items():
    print(a,b)
for index in user_dict2.items():
    print(index)
print(user_dict1.items())#返回可视图对象

chainmap用于将上面的算法进行优化

from collections import ChainMap
user_dict1 = {"a":"akebi1","b":"akebi2"}
user_dict2 = {"b":"akebi3","d":"akebi4"}
new_dict = ChainMap(user_dict1,user_dict2)#当合并的键有重复时,进行遍历的时候只会遍历前面的哪一个
for a , b in new_dict.items():
    print(a,b)

#.maps以列表的形式将数据展现出来
print(new_dict.maps)#.maps不是拷贝,而是指向原来的两个dict数据,所以可以通过map来修改原来的数据
#所以chainmap并没有将前面的两个数据全部拷贝到新的结构里面,而是在原数据里面增加了迭代器

print(new_dict)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值