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语言来实现的
实现字典嵌套
函数也是可调用对象
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功能详解
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)