如何在 Python 3 中導入模塊

介紹

Python 程式語言附帶各種內建函數。其中包括幾個常見函數,包括:

  • print() 用於將表達式輸出
  • abs() 用於返回數字的絕對值
  • int() 用於將其他數據類型轉換為整數
  • len() 用於返回序列或集合的長度

然而,這些內建函數是有限的,我們可以利用模組來製作更複雜的程式。

模組是包含 Python 代碼的 Python .py 檔案。任何 Python 檔案都可以被參考為模組。名為 hello.py 的 Python 檔案具有模組名為 hello,可以被導入到其他 Python 檔案中,或在 Python 命令行解譯器上使用。您可以通過閱讀 在 Python 3 中撰寫模組的方法 來了解如何創建自己的模組。

模組可以定義函數、類別和變數,您可以在其他 Python `.py` 檔案中或透過 Python 命令列解譯器中引用它們。

在 Python 中,使用 `import` 陳述式來訪問模組。這樣做時,您會執行模組的程式碼,保持定義的作用域,以便您的當前檔案可以利用這些定義。

例如,當 Python 導入一個名為 `hello` 的模組時,解譯器會首先搜索內置模組中是否存在名為 `hello` 的模組。如果未找到內置模組,Python 解譯器將從 `sys.path` 變數接收到的目錄列表中搜索名為 `hello.py` 的檔案。

本教程將引導您檢查和安裝模組、導入模組以及為模組取別名。

先決條件

您應該已經在您的電腦或伺服器上安裝了Python 3並設置了編程環境。如果您尚未設置編程環境,您可以參考適用於您的操作系統(Ubuntu、CentOS、Debian等)的本地編程環境或伺服器編程環境的安裝和設置指南。本地編程環境或伺服器上的編程環境相關的安裝和設置指南。

檢查並安裝模組

有許多模組內置在Python標準庫中,該庫包含許多提供對系統功能的訪問或提供標準化解決方案的模組。Python標準庫是每個Python安裝的一部分。

信息:要跟隨本教程中的示例代碼,請在本地系統上運行python3命令,打開Python交互式外殼。然後,您可以在>>>提示後添加、複製、粘貼或編輯示例。

要檢查這些 Python 模組是否準備就緒,請進入您的本地 Python 3 編程環境或基於服務器的編程環境,並在命令行中啟動 Python 解釋器,如下所示:

  1. python

在解釋器中,您可以運行 import 陳述來確保所給定的模組準備就緒,如下所示:

  1. import math

由於 math 是一個內置模組,您的解釋器應該無需任何反饋即可完成任務,並返回提示符。這意味著您無需進行任何操作即可開始使用 math 模組。

讓我們使用一個您可能尚未安裝的模組來運行 import 陳述,例如 2D 繪圖庫 matplotlib

  1. import matplotlib

如果尚未安裝 matplotlib,您將收到如下錯誤:

Output
ImportError: No module named 'matplotlib'

您可以使用 CTRL + D 來停用 Python 解釋器,然後使用 pip 安裝 matplotlib

接下來,我們可以使用 pip 安裝 matplotlib 模組:

  1. pip install matplotlib

安裝完成後,您可以在 Python 解釋器中使用 import matplotlib 來導入 matplotlib,並且它將在無錯誤的情況下完成。

導入模組

要使用模組中的函數,您需要使用 import 陳述來導入該模組。

一個import語句由import關鍵字以及模塊的名稱組成。

在Python文件中,這將在代碼頂部聲明,在任何shebang行或一般注釋下。

因此,在Python程序文件my_rand_int.py中,我們將以這種方式導入random模塊以生成隨機數:

my_rand_int.py
import random

當我們導入一個模塊時,我們正在將其作為單獨的命名空間使其在我們當前的程序中可用。這意味著我們將不得不使用點表示法引用函數,如[module].[function]

在實踐中,以random模塊為例,這可能看起來像一個函數:

  • random.randint()調用該函數返回一個隨機整數,或
  • random.randrange()調用該函數返回指定範圍內的一個隨機元素。

讓我們創建一個for循環來展示我們將如何在我們的my_rand_int.py程序中調用random模塊的函數:

my_rand_int.py
import random


for i in range(10):
    print(random.randint(1, 25))

這個小程序首先在第一行導入random模塊,然後進入一個for循環,該循環將使用10個元素。在循環內,程序將打印在1到25之間(包括邊界)的隨機整數。整數125被傳遞給random.randint()作為其參數。

當我們執行python my_rand_int.py這個程式時,將會得到10個隨機整數作為輸出。由於這些數字是隨機的,每次運行程式時可能會得到不同的整數,但它們將生成類似以下的結果:

Output
6 9 1 14 3 22 10 1 15 9

這些整數不應該低於1或高於25。

如果您想使用來自多個模塊的函數,可以通過添加多個import語句來實現:

my_rand_int.py
import random
import math

您可能會看到導入多個模塊並使用逗號分隔它們的程序,例如import random, math,但這不符合PEP 8樣式指南

為了使用我們的附加模塊,我們可以從math中添加常數pi到我們的程序中,並減少打印出的隨機整數的數量:

my_rand_int.py
import random
import math


for i in range(5):
    print(random.randint(1, 25))

print(math.pi)

現在,當我們運行我們的程序時,我們將收到以下類似的輸出,我們的最後一行輸出將是對pi的近似:

Output
18 10 7 13 10 3.141592653589793

import語句允許您將一個或多個模塊導入到您的Python程序中,讓您可以使用這些模塊中構建的定義。

使用fromimport

要在程序的命名空间中引用模块中的项目,可以使用fromimport语句。通过这种方式导入模块时,可以通过名称而不是点表示法来引用函数。

在此结构中,可以指定直接引用哪些定义。

在其他程序中,您可能会看到import语句使用星号(*)作为通配符引用模块中定义的所有内容,但这在PEP 8中被不鼓励。

让我们首先回顾一下从random模块导入一个特定函数randint()

my_rand_int.py
from random import randint

在这里,我们首先调用from关键字,然后是模块的名称random。接下来,我们使用import关键字并调用我们想要使用的特定函数。

现在,当我们在程序中实现此函数时,我们将不再使用点表示法random.randint(),而是只写randint()

my_rand_int.py
from random import randint


for i in range(10):
    print(randint(1, 25))

运行程序时,您将收到类似于我们之前收到的输出。

使用fromimport结构允许我们在程序的命名空间中引用模块的定义元素,从而避免使用点表示法。

别名模块

使用 as 關鍵字可以修改 Python 內的模組名稱和其功能。

您可能想要更改名稱,因為您在程式中已經使用了相同的名稱來表示其他東西,另一個您已導入的模組也使用了該名稱,或者您可能想要縮寫您正在大量使用的較長名稱。

這條語句的構造如下:

import [module] as [another_name]

讓我們修改我們的 my_math.py 程式文件中的 math 模組名稱。我們將把 math 模組名稱改為 m,以縮寫它。我們修改後的程式將如下所示:

my_math.py
import math as m


print(m.pi)
print(m.e)

在程式中,我們現在將 pi 常數稱為 m.pi 而不是 math.pi

對於一些模組,使用別名是司空見慣的。 matplotlib.pyplot 模組的官方文件 呼籲使用 plt 作為別名:

import matplotlib.pyplot as plt

這使程序員可以將較短的單詞 plt 附加到模組中的任何可用函數,如 plt.show()。您可以在我們的 “如何在 Python 3 中繪製數據使用 matplotlib 教程” 中看到此別名導入語句的使用。

結論

當我們導入模塊時,我們能夠調用不是內置在Python中的函數。一些模塊是作為Python的一部分安裝的,而一些我們將通過pip安裝。

利用模塊讓我們的程序更加健壯和強大,因為我們在利用現有的代碼。我們也可以創建自己的模塊供自己和其他程序員在未來的程序中使用。

Source:
https://www.digitalocean.com/community/tutorials/how-to-import-modules-in-python-3