前面,我們分享的所有示例程序幾乎都是在 Python 的交互式 shell 中完成的。倘若從 shell 中退出,則之前所做的一切都會丟失。因此,如果要編寫較長的程序,最好是利用文本編輯器,將程序保存在文件中,然後將該文件作為解釋器的輸入來運行,這個過程被稱為創建腳本。
隨著程序的發展,功能會越來越多,通常需要將其拆分成好多個文件,以便使結構清晰、易於維護。除此之外,還可能想在多個程序中使用已編寫過的一些函數,而無需將其定義復制到每個程序中… 為此,可以將定義放在一個文件中,並在解釋器的交互模式下或者腳本中使用它,這樣的文件被稱為模塊。
| 版權聲明:一去、二三裡,未經博主允許不得轉載。
模塊是一個包含 Python 代碼的
.py
文件
模塊既可以被導入到 Python 的交互式解釋器中,也可以被導入到其他模塊中,除此之外,模塊還可以作為獨立的腳本來執行。
導入模塊的動作由 import
語句完成,通常(非必需)將所有的 import
語句放在一個模塊(或腳本)的開頭處,被導入的模塊名被放置在導入模塊的全局符號表中。
一個模塊可以包含可執行語句和函數定義,這些語句用於初始化模塊,它們僅在 import
語句中第一次遇到模塊名時執行(如果文件作為腳本執行,它們也會運行)。
Python 本身提供了大量的標准模塊(例如:math
、os
),完整的列表可以在 Python Module Index 中找到,這些文件位於 Python 安裝位置的 Lib 目錄中。
注意:標准模塊的導入方式與用戶自定義模塊的導入方式相同
可以使用 import
語句導入一個模塊,並使用點(.
)運算符訪問其中的名稱(定義)。
例如,我們編寫了一個 script.py
模塊,來訪問標准模塊 math
:
import math
print('pi:', math.pi)
print('fabs:', math.fabs(-2))
其中,pi
是 math
的屬性,也就是數學中的圓周率 - π
。而 fabs()
是其中的函數,用於取絕對值。
執行腳本:
$ python script.py
pi: 3.141592653589793
fabs: 2.0
如果要導入多個模塊,可以使用多個 import
語句:
import math
import os
也可以將其合並為一個,模塊名之間用逗號(,
)進行分隔:
import math, os
推薦使用第一種方式,可讀性更好。雖然操作起來麻煩一些,但便於理解。
一旦模塊名稱過長,便可以在導入時進行重命名,幫助記憶。
例如,將 math
重命名為 m
:
import math as m
print('pi:', m.pi)
print('fabs:', m.fabs(-2))
# 無效,引發 NameError
#print('pi:', math.pi)
#print('fabs:', math.fabs(-2))
這裡,可以將 m
看做是 math
的一個別名,用 m.pi
的形式來訪問。
注意: 在這種情況下,名稱 math
不會被識別,它是無效的。
可以從模塊導入特定的名稱,而無需導入整個模塊。
例如,從 math
模塊僅導入屬性 pi
:
from math import pi
print('pi:', pi)
# 無效,引發 NameError
#print('pi:', math.pi)
#print('fabs:', fabs(-2))
這時,要訪問 pi
,不需要使用點運算符。
注意: 在這種情況下,由於只導入了 pi
而沒有導入其他名稱,所以無法訪問 fabs()
。
可以使用星號(*
)從模塊中導入所有的名稱。
from math import *
print('pi:', pi)
print('fabs:', fabs(-2))
這樣,math 模塊中的所有定義都會被導入,這使得除了以下劃線(_
)開始的所有名字在范圍內都是可見的。
注意: 這種用法並不好,因為會引入一組未知的名稱,而且有可能導致標識符的重復定義,可讀性很差,所以不建議使用。