簡介
Python 是全球最常用的程式語言之一。模組 是 Python 程式碼中至關重要的部分。模組簡單來說就是一個 .py 檔案,在 Python 3 的環境中。這意味著您可以將任何 Python 檔案視為一個模組。
您可以透過預先建置的函式庫取得這些模組。您可以查看 Python 標準函式庫 以了解更多資訊。這些模組會在您安裝 Python 時一併安裝到您的系統中。在其他情況下,您可以使用 Python 套件管理器 pip 來安裝這些模組。但如果您想建立自訂模組該怎麼辦?如果是這樣,您會很高興知道您可以在 Python 中製作自己的模組。
在這份詳細指南中,我們將概述在 Python 3 中編寫和匯入模組所需遵循的步驟。
先決條件
在我們開始之前,您需要確保已安裝 Python 3 並設定好開發環境。您可以參考我們的 在 Ubuntu 16.04 上安裝 Python 3 並設定本地開發環境的教學 來完成安裝(如果您尚未準備好)。
如何編寫模組?
讓我們從編寫模組開始。編寫模組就像撰寫任何其他 Python 檔案一樣。一個典型的模組包含函式、類別和變數的定義。隨後,您可以使用該模組並將其應用於其他 Python 程式。
為了幫助您理解,讓我們來看一個例子。假設我們想建立一個名為 hello.py 的檔案。稍後我們也會將其匯入到另一個檔案中。這個過程的第一步是建立一個函式。這個函式的作用是列印 Hello, World! ,如下所示:
|
1 2 3 |
# 定義一個函式 def world(): print("Hello, World!") |
此時,執行 python hello.py 指令將不會產生任何結果。這是原因我們還沒有給程式任何指令。為了讓它運作,我們需要匯入該模組。
如何匯入模組?
為了 匯入您的模組 以使其發揮作用,您需要在同一個目錄中建立第二個檔案。我們將這個新檔案命名為 main_program.py。這兩個檔案必須在同一個目錄中的原因是,我們需要引導程式去哪裡尋找該模組。這適用於任何非內建的新自訂模組:
|
1 2 3 4 5 |
# 匯入 hello 模組 import hello # 呼叫函式 hello.world() |
我們使用點記法(dot notation)來呼叫函式。另一種方法是使用 from...import 方法。在這裡,我們將透過匯入模組來將函式呼叫為 world() ,方式為 from hello import world。最後,您可以執行以下指令:
|
1 |
python main_program.py |
該指令將向您顯示以下輸出:
|
1 2 |
輸出: Hello, World! |
將變數新增至模組
接下來,我們將看看如何透過在模組中放入定義來將變數新增至模組中:
|
1 2 3 4 5 6 |
# 定義一個函式 def world(): print("Hello, World!") # 定義一個變數 shark = "Sammy" |
隨後,您將在 print() 函式中呼叫該變數。我們將在 main_program.py 檔案中呼叫它:
|
1 2 3 4 5 6 7 |
# 匯入 hello 模組 import hello # 呼叫函式 hello.world() # 列印變數 print(hello.shark) |
執行程式將顯示以下輸出:
|
1 2 3 |
輸出: Hello, World! Sammy |
將類別新增至模組
最後,我們將看看您如何 在您的檔案中定義一個類別 以供模組使用。延續我們的範例,我們將在 Octopus 在 hello.py 檔案中建立一個名為 name 和 color 的新類別。我們還將為其分配
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
# 定義一個函式 def world(): print("Hello, World!") # 定義一個變數 shark = "Sammy" # 定義一個類別 class Octopus: def __init__(self, name, color): self.color = color self.name = name def tell_me_about_the_octopus(self): print("This octopus is " + self.color + ".") print(self.name + " is the octopus's name.") |
接下來,您必須將該類別新增至接近 main_program.py 檔案的結尾處:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
# 匯入 hello 模組 import hello # 呼叫函式 hello.world() # 列印變數 print(hello.shark) # 呼叫類別 jesse = hello.Octopus("Jesse", "orange") jesse.tell_me_about_the_octopus() |
您可以使用 hello.Octopus() 指令來呼叫該類別。它將為您顯示該檔案命名空間中 Octopus 類別的函式與屬性。因此,您可以在最後一行編寫 jesse.tell_me_about_the_octopus() 而無需調用 hello。也可以在不使用 hello 的情況下呼叫該類別的個別屬性。例如,您可以直接執行 jesse.color。當您執行該程式時,它將顯示以下輸出:
|
1 2 3 4 5 |
輸出: Hello, World! Sammy This octopus is orange. Jesse is the octopus's name. |
使用模組實作程式碼
除了可以使用模組來指定定義之外,您也可以使用它們來實作程式碼。假設我們想要實作 world() 函式。我們將完全重寫初始的 hello.py 檔案:
|
1 2 3 4 5 6 |
# 定義一個函式 def world(): print("Hello, World!") # 在模組內呼叫函式 world() |
在 main_program.py 檔案中,我們將刪除除 import 語句之外的所有內容,留下以下內容:
|
1 2 |
# 匯入 hello 模組 import hello |
執行主程式檔案將為您提供此輸出,因為程式實作並執行了 world() 函式:
|
1 2 |
輸出: Hello, World! |
如何從另一個目錄存取模組?
現在您已經知道如何建立和修改模組,您需要知道如何從另一個目錄存取它們。當您需要在另一個專案上使用特定模組時,這非常有用。以下我們將說明兩種方法。
-
附加路徑
第一種方法是使用已經在使用該模組的程式檔案來啟用模組路徑。遺憾的是,這樣做並不意味著該模組將在整個系統中可用。因此,這僅被視為臨時解決方案。它通常在專案的開發階段中使用。
您可以透過匯入 sys 模組以及您需要使用的其他重要模組來開始附加程序。我們將把它們匯入到主程式檔案中。您可以在 Python 標準函式庫中找到 sys 模組。您需要它,因為它包含特定於您系統的基本參數和函式。
再次考慮我們之前的範例。假設 hello.py 檔案位於 /usr/sammy/ 路徑,而 main_program.py 檔案在另一個目錄中。我們將首先在 hello 模組於 main_program.py 檔案中,並使用 sys 模組。接下來,我們將 /usr/sammy/ 附加到路徑中:
|
1 2 3 4 5 6 |
import sys sys.path.append('/usr/sammy/') import hello ... |
如果您正確設定了路徑, main_program.py 檔案將能輕鬆運行且不會出錯。您將獲得與兩個檔案位於同一目錄時相同的輸出。
-
Python 路徑
您可以選擇的另一個選項是 Python 路徑。在這裡,您會將模組本身新增到 Python 檢查模組和套件的路徑中。正如您可能推斷的那樣,這使得該模組在整個系統中都可用,使其成為一個可行的永久解決方案。
要做到這一點,您需要找出 Python 在哪裡尋找模組。您必須從程式設計環境中運行 Python 解譯器,如下所示:
|
1 |
python |
下一步是匯入 sys 模組:
|
1 |
>>> import sys |
接下來,列印出系統路徑:
|
1 |
>>> print(sys.path) |
現在,您將看到系統路徑作為輸出。至少會有一條。但是,在程式設計環境中可能會有幾條。在列表中,找到您正在使用的環境。請記住,您可能也想將該模組新增到主系統 Python 路徑中。它看起來會像這樣:
|
1 2 |
輸出: '/usr/sammy/my_env/lib/python3.5/site-packages' |
最後,將 hello.py 檔案移至此目錄,並按如下方式匯入模組:
|
1 2 |
import hello ... |
如果程式運行該檔案且未產生任何錯誤,則表示您嘗試成功。透過此過程,您將能夠從系統上的任何目錄存取該模組。
結論
本教學旨在幫助您熟悉 Python 模組的編寫。這與您編寫任何 Python .py 檔案非常相似。我們首先討論了什麼是 Python 模組及其相關功能。然後,我們探索了如何在 Python 的其他程式檔案中應用這些定義。最後,我們弄清楚了模組可存取性的細節。現在您知道如何在 Python 3 中編寫模組以及如何存取它們了。
若要進一步累積您關於 Python 程式語言的知識,請參閱 我們的部落格 以取得更多資源:
祝您編寫程式愉快!
留言
目前尚無留言。成為第一個留言的人吧。