这一部分介绍一些更高级的标准库,不得不说确实很高级,我也只用过其中的四,五个,对于某些标准库经验不是很充足,尽量把他们写得简单易懂吧。
1. 格式化输出
1.1 reprlib模块中的repr() 方法,专门用来简短得显示一些大型的或者深层嵌套的容器,简单来说,如果要显示内容有很多,这个方法就把最前面的一些元素显示出来,其余隐藏,如下:
set 是不包含重复元素的,所以通常用来去重,第一个格输出的是repr()方法显示的,第二格是正常显示 的:
1.2 pprint模块中pprint()方法,就是pretty print(), 美化输出,当输出的数据比较长时,pprint()方法能够自动换行,更清楚的显示出对象的结构,如下:
1.3 textwrap 模块用来格式化文本的段落显示,使文本的显示更适应屏幕宽度,如下:
1.4 locale 模块处理有特定文化特色的数据格式,locale模块的format()方法,提供了一个grouping 属性,可以直接组分隔符来格式化数字,如下:
2. Template(模版)
用于一些定制化操作,用$标记的占位符占据需要修改或变动的字段,修改的时候只需向点位符传递要参数即可,就相当于套用模版,不需要整体改动,非常方便
template是string模块下的一个类,创建类的对象的时候,传递模版,然后调用类的方法substitute()来替换占位的字段,如下:
需要注意的是:当占位的内容与后面的字符没有空格分隔的时候要用{}括起来,如${}folk
因为占位字段是用$标记的,所以要想显示‘$’就要用$$来表示
调用substitute() 方法时,参数的个数要与占位字短数量一致,否则抛出异常, safe_substitute()方法即使参数的个数不一致,也不会报错
3. 二进制数据记录格式
struct模块的pack()和unpack()方法用于处理不定长度的二进制记录格式,H 和 I 分别代表两个字节 和 四个字节的无符号数字,如下:
4. 多线程-threading模块
多线程用于非线性依赖的任务,一个线程的任务在等待的时候,另一个线程可以做别的作务,如一个线程用于计算,其他线程用于并行的输入输出,
5. 日志(logging)
logging模块用于记录程序执行中的一些信息,分为五个等级的日信息,分别如下:
这些日志信息可以写入到一个单独的日志文件中,也可以输出到标准输出,或标准错误
6. 弱引用
weakref 模块提供一个方法,不用创建引用就可以追踪一个对象,当对象删除的时候,它也自动被移除掉,这就是弱引用。多用于缓存一个创建很费劲的对象,如:
7. 列表工具:
7.1 array模块的array对象提供了一个数组方法用于储存相同类型的数据
7.2 collection模块的deque对象用法和list十分相似,但是更快的append数据,从左边pop数据,但是从中间查找就比较慢了,适合实现队列和广度优先查找,如:
7.3 bisect 模块用于操作有序列表,如:
7.4 headq模块提供了一系列方法用于把常规列表转换成堆,最小的值在根结点,越小的值越靠近根结点,如
8. 十进制浮点运算
decimal模块提供了十进制浮点的数据类型,用于十进制浮点运算,相比二进制实现的float类型(二进制不能精确地表示小数),decimal 非常适用于需要十进制表示的科学计算,精确度控制
由于 精度的不同以及表示方法的不同,十进制浮点运算与float 类型的计算结果可能有差别
decimal可以设置输出的精度,如下
这一部分确实有点生疏,详情请参见官方文档:https://docs.python.org/3/tutorial/stdlib2.html