今天介绍模块。

模块

任何程序都可以作为模块,但是除了预置位置外,我们要告诉程序去哪里查找:

import sys
sys.path.append('C:/It/IS/A/PATH')

模块只能导入一次(多次不会报错但效果和一次相同)。
我们可以查看模块目录列表哪里:

import sys,pprint
pprint.pprint(sys.path)

其中,site-packages是py解释器专门存放模块的地方。
pprint可以打印多行数据,而不必使用print。不过,让别人使用你编写的模块,还需要打包,详见packaging.python.org

我们可以将模块编组为包,包是另一种模块,但它们可包含其他模块。包是一个目录,若要被识别为包,其中要有__init__.py文件。我们可以在包中嵌套其他的包。

探索模块

我们可以使用dir列出某个模块中包含的全部函数:

import math
print([dir(math)])

我们也可以使用help查看模块或函数的帮助(如果有)。

import math
print(help(math))
print(help(math,pi))

我们刚才用dir的时候一定看到了一个__doc__的函数,那是模块作者的说明文档,我们可以直接用print打印。

常用的模块

常用的模块有sys,os,fileinput,time,random,shelve和json,re。
这里是官方给出的所有预置模块:https://docs.python.org/zh-cn/3/library/index.html

集合,堆,栈,队列

集合

我们可以直接创建一个集合。

print(set(range(10)))

集合和字典一样,用花括号表示。下面是一些常见的运算:

a={1,2,3}
b={2,3,4}
print(a.union(b))
print(a|b)

print(a&b) 
print(a.intersection(b))

print((a&b).issubset(a))
print(a&b<=a)

print(a-b)
print(a.difference(b))

print(a.symmetric_difference(b))
print(a^b)

print(a.copy())
print(a.copy() is a)

python并没有堆类型,堆用列表表示,有一个模块heapq来操作。
| 函数 | 作用 |
| ———— | ———— |
| heappush(heap,x) | 将x压入堆中 |
| heappop(heap) | 从堆中弹出最小的元素 |
| heapify(heap) | 让列表具备堆特征 |
| heapreplace(heap,x) | 弹出最小的元素,并将x压入堆中 |
| nlargest(n,iter) | 返回iter中n个最大的元素 |
| nsmallest(n,iter) | 返回iter中n个最小的元素 |
前四个函数与堆操作直接相关,其中除了第三个以外必须让列表具有堆特征。
后两个函数也推荐在一般的列表中使用。

栈和队列

栈完全可以通过列表操作实现。
模块collections中包含类型deque和其他几个集合类型。
下面是一些常用的方法

from collections import deque
q=deque(range(5))
q.append(5)
q.appendleft(6)
print(q)
q.pop()
q.popleft()
print(q)
q.rotate(3)
print(q)
q.rotate(-1)
print(q)

明天挑几个模块说一说。