2.18. 使用模块

模块 是一组 Python 代码 —— 函数、类、常量 —— 经过打包,便于在许多脚本之间复用。Python 自带一个充满模块的标准库,而 OpenMV 固件又增加了更多用于与摄像头通信的模块。用 import 来调用一个模块。

2.18.1. import

最直接的形式是以模块自己的名字把整个模块引入:

import math

print(math.sqrt(2))

输出:

1.4142135623730951

import 之后,由 math 定义的每一个名称都可以通过 math.<name> 访问到。模块名来自它的文件名(不含 .py);命名空间前缀可以防止两个有同名函数的模块发生冲突。

2.18.2. from ... import

要把特定的名称直接引入当前作用域,请使用 from

from math import sqrt, pi

print(sqrt(2), pi)

输出:

1.4142135623730951 3.141592653589793

现在不再有命名空间前缀了。这对于频繁使用的名称很方便,但一个引入许多名称的 from 导入会让人更难辨别每个名称来自何处。在较大的脚本中,单纯的 import math 通常更清晰。

星号形式 from math import * 会引入模块导出的 所有内容。请避免使用它 —— 它会污染命名空间并干扰 IDE 的自动补全。

2.18.3. 用 as 起别名

可以用 as 把长长的模块名缩短:

import json as j

j.dumps({"ok": True})

同样的技巧也适用于用 from 导入的单个名称:

from math import sqrt as root

root(9)              # 3.0

对于一般的 Python 代码,只有当原名称确实很长、或者与作用域中已有的东西冲突时才起别名。

2.18.4. 可用的模块

库参考 列出了摄像头上自带的每一个模块 —— MicroPython 标准库以及驱动图像传感器、运行机器视觉和控制板载硬件的 OpenMV 专属模块。它们全都使用上面展示的同一套 import 机制。