跳轉到內容

Python 入門教程/匯入模組

來自華夏公益教科書,開放的書籍,開放的世界

上一課我們學習了關於類的重要概念。正如你所記得的,類是變數和函式的組合,在一個整潔的包中。程式設計術語稱之為封裝,但無論它被稱為什麼,它都是一個非常酷的功能,可以將事物組合在一起,以便程式碼可以在許多地方的許多例項中使用。當然,你必須問,“如何將我的類放到許多地方,在許多程式中?”。答案是將它們放到一個模組中,以便匯入到其他程式中。

模組?什麼是模組?

[編輯 | 編輯原始碼]

一個模組是一個 Python 檔案,它(通常)只包含變數、函式和類的定義。例如,一個模組可能看起來像這樣

程式碼示例 1 - moduletest.py
### EXAMPLE PYTHON MODULE
# Define some variables:
numberone = 1
ageofqueen = 78

# define some functions
def printhello():
    print("hello")
    
def timesfour(input):
    print(input * 4)
    
# define a class
class Piano:
    def __init__(self):
        self.type = input("What type of piano? ")
        self.height = input("What height (in feet)? ")
        self.price = input("How much did it cost? ")
        self.age = input("How old is it (in years)? ")
	
    def printdetails(self):
        print(f'This piano's height is {self.height} foot')
        print(self.type, "piano, " + self.age, "years old and costing\
 " + self.price + " dollars.")

正如你所看到的,一個模組看起來很像你的普通 Python 程式。

那麼我們用模組做什麼呢?我們將它的部分(或全部)匯入到其他程式中。

為了將 moduletest.py 中的所有變數、函式和類匯入到你正在編寫的另一個程式中,我們使用 import 運算子。例如,要將 moduletest.py 匯入到你的主程式中,你將使用以下程式碼

程式碼示例 2 - mainprogram.py
### mainprogam.py
### IMPORTS ANOTHER MODULE
import moduletest

這假設該模組與 mainprogram.py 位於同一個目錄中,或者是一個 Python 自帶的預設模組。你在檔名末尾省略了 '.py' - 它會被忽略。你通常將所有 import 語句放在 Python 檔案的開頭,但從技術上講,它們可以放在任何地方。為了在你的主程式中使用模組中的專案,你使用以下程式碼

程式碼示例 3 - mainprogram.py 繼續
### USING AN IMPORTED MODULE
# Use the form modulename.itemname
# Examples:
print(moduletest.ageofqueen)
cfcpiano = moduletest.Piano()
cfcpiano.printdetails()

正如你所看到的,你匯入的模組的行為與我們上一課中學習的類非常相似 - 模組內部的任何內容都必須以 modulename 開頭才能工作。

更多關於模組的資訊

[編輯 | 編輯原始碼]

希望你能擺脫必須在從模組中使用的每個專案之前新增的 modulename 部分?不可能?永遠不會?好吧,我無論如何都要教你。

避免這種麻煩的一種方法是隻從模組中匯入想要的物件。為此,你使用 from 運算子。你以 from modulename import itemname 的形式使用它。以下是一個示例

程式碼示例 4 - 匯入單個物件
### IMPORT ITEMS DIRECTLY INTO YOUR PROGRAM

# import them
from moduletest import ageofqueen
from moduletest import printhello

# now try using them
print(ageofqueen)
printhello()

這樣做有什麼意義呢?好吧,也許你可以用它來使你的程式碼更易讀。如果我們在模組中嵌套了許多模組,它還可以消除額外的隱藏層。

如果你願意,你可以使用 from modulename import * 以這種方式從模組中匯入所有內容。當然,如果你的程式中存在與模組中某些專案同名的物件,這可能會帶來麻煩。對於大型模組來說,這種情況很容易發生,並且會導致很多頭痛。更好的方法是使用普通方式匯入模組(不使用 from 運算子),然後將專案分配給一個本地名稱

程式碼示例 5 - mainprogram.py 繼續
### ASSIGNING ITEMS TO A LOCAL NAME

# Assigning to a local name
timesfour = moduletest.timesfour

# Using the local name
print(timesfour(565))

這樣,你可以消除一些隱藏層,並且可以擁有來自特定模組的所有專案。

華夏公益教科書