您的位置:首页 > 编程语言 > Python开发

Python 内置模块1

2015-01-30 17:22 519 查看
十三:常见内置模块:
Python之所以自称 batteries included 就是因为内置了愈多非常有用的模块 无需安装配置 就可以直接使用

1:collections Python内建的一个集合模块 提供很多有用的集合类
namedtuple: 一个函数 可以用来创建一个自定义的tuple对象 并且固定tuple元素的个数 并可以用属性而不是索引来引用tuple元素 具备tuple的元素不变性
>>>from collections import namedtuple
>>>Point=namedtuple('Point',['x','y'])
>>>p=Point(1,2)
>>>p.x
1
>>>p.y
2
可以验证创建的Point对象是tuple的一种子类:
>>>isinstance(p,Point)
True
>>>isinstance(p,tuple)
True
类似的也可以用坐标和半径表示一个园

deque: 使用list存储数据时 按索引访问元素很快 但是插入和删除就很慢 因为list是线性的 deque就是为了高效实现插入和删除操作的双向列表 适用于队列和栈
>>>from collections import deque
>>>q=deque(['a','b','c'])
>>>q.append('x')
>>>q.appendleft('y')
>>>q
deque(['y','a','b','c','x'])
deque 除了实现list的append() 和pop()外 还支持appendleft()和popleft() 这样就可以非常高效的往头部添加删除元素

defaultdict:使用dict如果引用的key 不存在就会抛出keyError 如果希望key不存在时 返回一个默认的值 就可以使用defaultdict了
>>>form collections import defaultdict
>>>dd=defaultdict(lambda:'N/A')
>>>dd['key1']='abc'
>>>dd['key1']
'abc'
>>>dd['key2']
'N/A'
除了key不存在返回默认值 defaultdict其他的行为跟dict一样

OrderedDict: 使用dict key是无序的 在对dict做迭代的时候 我们无法确定key 的顺序 如果要保存key的顺序 可以用OrderedDict
>>>from collections import OrderedDict
>>>d=dict([('a',1),('b',2),('c',3)])
>>>d
{'a':1,'c':3,'b':2}
>>>od=OrderedDict([('a',1),('b',2),('c',3)])
>>>od
OrderedDict([('a',1),('b',2),('c',3)])
OrderedDict 会按照key 的插入顺序进行排序 而不是按照key本身进行排序

Counter:一个简单的计数器 例如统计字符出现的个数
>>>from collections import Counter
>>>c=Counter()
>>>for ch in 'programming':
c[ch]=c[ch]+1
>>>c
Counter({'g':2,'m':2,'r':2,'a':1,'i':1,'o':1,'n':1,'p':1})

2:Base64
base64 是一种64个字符用来表示任意二进制数据的方法
base64原理首先准备一个包含64个字符的数组 。然后对二进制数据进行处理 没3个字节一组 一共24bit 划分为4组 正好6bit 这样我们就
得到4个数字作为索引号 然后查表 获得相应的4个字符 这就是编码后的字符串
base64会把3个字节的二进制数据编码成4个字节的文本数据 长度增加33% 好处是编码后的文本数据可以在邮件正文和网页中直接显示
base64会在不足3的倍数的文件数据后面用\x00字节在末尾补足 再在编码的末尾加上1个或者2个= 表示补了多少字节 解码的时候会自动去掉
Python内置的base64 可以直接进行base64编码
>>>import base64
>>>base64.b64encode('binary\x00string')
'Ym..........................'
>>>base64.b64decode('Ym.............')
'binary\x00string'
由于标准的base64可能会出现字符 + 和 / 在URL中就不能直接作为参数 所以有一种 URL safe 的base64编码 其实就是把字符 + / 分别变为 - _
>>>base64.b64ecode('i\xb7\x1d\xfb\xef\xff')
'abcd++//'
>>>base64.urlsafe_b64encode('i\xb7\x1d\xfb\xef\xff')
'abcd--__'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: