python中os与sys两模块的区别,pycharm与python的区别
收集
Collections是Python内置的集合模块,它提供了许多有用的集合类。
命名模板
我们知道元组可以表示一个不变集。例如,一个点的二维坐标可以表示为:
p=(() 1,2))))))))))))).
但是这个元组是用来表示一个坐标的,如果看1和2就很难理解。
在定义和夸大类时,Namedtuple就派上了用场:
fromcollectionsimportnamedtuple
point=namedtuple(point ,[x , y]).
p=点(1,2)).
p.x
一个
p.y
2
Namedtuple是创建自定义元组对象的函数,可以指定元组元素的个数,引用属性中的元组元素,而不是索引。
因此,使用namedtuple,您可以轻松定义具有元组不变性并且可以基于属性引用的数据类型。
确保您可以创建的点对象是一个元组种子类。
例(p,点))。
真实的
例(p,tuple))。
真实的
同样,如果一个圆要用坐标和半径来表示,也可以用namedtuple来定义。
NamedTuple((名称,[属性列表]):
circle=命名元组( circle ,[x , y , r]
双端队列
使用list存储数据时,通过索引访问元素速度很快,但是插入和删除元素速度很慢。由于链表是线性存储的,在数据量较大的情况下,插入和删除效率不高。
Deque是双向链表,适用于队列和栈,可以有效地执行插入和删除操作。
从集合中导入队列
q=deque([a , b , c]
q.append(x )))).
q .应用左(y))。
q
dke([ y , a , b , c , x]
Deque支持list的append(和pop)(和appendleft())和popleft()),所以可以非常有效地添加和删除头中的元素。
违约迪克
使用dict时,如果引用的键不存在,就会抛出一个KeyError。如果该项不存在,使用defaultdict返回默认值。
fromcollectionsimportdefaultdict
DD=默认字典(lambda: n/a )
dd[key1]=abc
Dd[key1] # key1存在
abc
Dd[key2] # key2不存在。恢复默认值。
不适用
注意,默认值是通过调用函数返回的,该函数是在创建defaultdict对象时传递的。
defaultdict的行为与dict完全相同,只是在键不存在时返回默认值。
订购的CD
使用dict时,键是乱序的。当重复dict时,我们不能决定键的顺序。
要保持密钥的顺序,请使用有序的CD。
fromcollectionsimportordereddict
d=dict()、a)、1)、b)、2)、c)、3)
d # dict的键有问题。
{a: 1, c: 3, b: 2}
Od=有序磁盘((a),1,(b),2,(c),3))
od # ordered直接键已订购
# Ordered CD()),A),1),B),2),C),3))
请注意,有序目录中的键是按插入顺序排序的,而不是键本身:
gt;od=OrderedDict()
od[z]=1
od[y]=2
od[x]=3
List(od.keys()) #按插入键的顺序返回
[z , y , x]
OrderedDict可以实现FIFO(先进先出)字典。当容量超过限制时,最早添加的密钥将首先被删除:
从集合导入订单直接
LastUpdatedOrderedDict类(OrderedDict):
def __init__(self,capacity):
super(LastUpdatedOrderedDict,self)。__init__()
自我。_容量=容量
def __setitem__(self,key,value):
如果Key在self else 0中,则containsKey=1
if len(self) - containsKey=self。_容量:
last=self.popitem(last=False)
打印(删除:,最后一个)
如果包含密钥:
del self[key]
print(set:,(key,value))
否则:
打印(添加:,(键,值))
OrderedDict。__setitem__(自身,关键字,值)
计数器
Counter是一个简单的计数器,例如,计算出现的字符数:
从集合导入计数器
c=计数器()
对于“编程”中的ch:
.c[ch]=c[ch] 1
.
c
计数器({g: 2, m: 2, r: 2, a: 1, i: 1, o: 1, n: 1, p: 1})
Counter实际上是dict的一个子类。从上面的结果可以看出,字符‘g’、‘m’和‘r’各出现两次,其他字符各出现一次。
总结
集合模块提供了一些有用的集合类,可以根据需要进行选择。
Base64
Base64是一种用64个字符表示任意二进制数据的方法。
用记事本打开exe、jpg、pdf等文件时,我们都会看到很多乱码,因为二进制文件中包含了很多无法显示和打印的字符。因此,如果像记事本这样的文本处理软件要能够处理二进制数据,它需要一个从二进制到字符串的转换方法。Base64是最常见的二进制编码方法。
Base64的原理很简单。首先,准备一个64个字符的数组:
[A , B , C ,甲,乙,丙,0, 1, , /]
然后对二进制数据进行处理,每三个字节进行分组,共3x8=24bit,分为四组,每组正好6位:
这样我们得到四个数作为索引,然后查表得到对应的四个字符,就是编码后的字符串。
所以Base64编码会把3字节的二进制数据编码成4字节的文本数据,长度会增加33%。优点是编码后的文本数据可以直接显示在邮件正文、网页等中。
如果要编码的二进制数据不是3的倍数,最后会剩下1或2个字节怎么办?Base64在末尾补充了\x00字节,然后在代码末尾加一两个=号,表示补充了多少字节。解码时会自动删除。
Python内置的base64可以直接编解码base64:
导入base64
base64 . b64 encode(b binary \ x00 string )
bYmluYXJ5AHN0cmluZw==
base64 . b64 decode(b ymluyxj 5 Ahn 0 cmluzw==)
b 二进制\字符串
由于字符和/可能出现在标准的base64编码之后,它们不能直接用作URL中的参数,所以有另一种“url safe”的Base64编码,它实际上将字符和/改为-和_:
base64 . b 64 encode(b I \ xb7 \ x1d \ xfb \ xef \ xff )
babcd //
base64 . URL safe _ b 64 encode(b I \ xb7 \ x1d \ xfb \ xef \ xff )
babcd - __
base64 . URL safe _ b64 decode( ABCD-_ _ )
bi\xb7\x1d\xfb\xef\xff
你也可以自己定义64个字符的排列顺序,这样就可以自定义Base64编码了,但一般来说根本没必要。
Base64是一种通过表查找的编码方法,不能用于加密,即使使用自定义编码表也是如此。
Base64适用于编码小块内容,如数字证书签名、Cookie内容等。
由于=字符也可能出现在Base64编码中,但在URL和Cookie中使用=会造成歧义,因此许多Base64编码会删除=:
#标准Base64:
abcd - YWJjZA==
#自动移除=:
abcd - YWJjZA
去掉=,怎么解码?因为Base64将3个字节变为4个字节,所以Base64编码的长度始终是4的倍数。所以需要加=把Base64字符串的长度变成4的倍数,就可以正常解码了。
总结
Base64是一种任意二进制到文本的字符串编码方法,常用于在URL、Cookie和网页中传输少量二进制数据。
练习
请编写一个base64解码函数来处理删除=
每日问答-程序员问答分享平台-解决程序员问题快人一步,1024dada.com。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。