1、模块
1.1 模块就是程序
要告诉解释器去哪里查找模块,可执行:
导入模块后创建的__pycache__子目录,包含处理后的文件。
1.2 模块是用来下定义的
在模块中定义的类和函数以及对其进行赋值的变量都将成为模块的属性。
设置变量__name__的值能够检查模块是作为程序运行还是被导入另一个程序。
1.3 让模块可用
1.3.1 将程序放到正确的位置
放在类似与放置模块的地方site-packages,这样所有的程序都能够导入它
1.3.2 告诉解释器到哪里去找
标准做法是将模块所在的目录包含在环境变量PYTHONPATH中。
1.4 包
包其实是另一种模块,它们可以包含其他模块。
要被Python视为包,目录必须包含文件__init__.py,模块则存储在扩展名为.py的文件中。
调用包名时,包的内容被存放在__init__.py中。
2、探索模块
2.1 模块包含什么
1、使用dir
函数dir,列出对象的所有属性(对于模块,它列出所有的函数、类、变量等)。
2、变量__all__
2.2 使用help获取帮助
2.3 文档
2.4 使用源代码
3、标准库:一些深受欢迎的模块
3.1 sys
模块sys能够访问与python解释器紧密相关的变量和函数
3.2 os
模块os能够访问多操作系统服务。
3.3 fileinput
模块fileinput能够轻松地迭代一系列文本文件中的所有行。
3.4 集合、堆和双端队列
1、集合
集合是可变的,只能包含不可变(散列表)的值。
frozenset类型,它表示不可变(可散列)的集合。
2、堆
堆是一种优先队列的数据结构。优先队列能够以任意顺序添加对象,并随时(可能是在两次添加对象之间)找出(并删除)最小的元素。
Python没有独立的堆类型,而只有一个包含一些堆操作函数的模块heapq(其中的q表示队列)。
heapq包含6个函数,其中前4个与堆操作直接相关。
必须使用列表来表示堆对象本身。
堆特征(heap property):位置i处的元素总是大于位置i//2处的元素(反过来说就是小于位置2*i和2*i+1处的元素。
函数 | 描述 |
heappush(heap,x) | 将x压入堆中 |
heappop(heap) | 从堆中弹出最小的元素 |
heapify(heap) | 让列表具备堆特征 |
heapreplace(heap,x) | 弹出最小的元素,并将x压入堆中 |
nlargest(n,iter) | 返回iter中n个最大的元素 |
nsmallest(n,iter) | 返回iter中n个最小的元素 |
3、双端队列
双端队列支持在队首(左端)高效的附加和弹出元素,而使用列表无法这么做。
双端队列从可迭代对象创建。
模块collections中,包含类型deque以及其他几个集合(collection)类型。
其他方法:popleft、appendleft、extendleft。
用于extendleft的可迭代对象中的元素将按相反的顺序出现在双端队列中。
3.5 time
模块包含用于获取当前时间、操作时间和日期、从字符串读取日期、将日期格式化为字符串的函数。
函数 | 描述 |
astime([tuple]) | 将时间元组转换为字符串 |
localtime([secs]) | 将秒数转换为表示当地时间的日期元组 |
mktime(tuple) | 将时间元组转换为当地时间 |
sleep(secs) | 休眠secs秒 |
strptime(string[,format]) | 将字符串转换为时间元组 |
time() | 当前时间 |
datatime提供了日期和时间算术支持。
timeit可帮助计算代码段的执行时间。
3.6 random
random() | 返回一个0-1的随机实数 |
getrandbits(n) | 以长整数方式返回n个随机的二进制位 |
uniform(a,b) | 返回一个a-b(含)的随机实数 |
randrange([start],stip,[step]) | 从range(strat,stop,step)中随机地选择一个数 |
choice(seq) | 从序列seq中随机地选择一个元素 |
shuffle(seq[,random]) | 就地打乱序列seq |
sample(seq,n) | 从序列seq中随机地选择n个值不同的元素 |