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 會讓人更難分辨每個名稱是從哪裡來的。在較大的指令碼中,單純的 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 機制。