6.5. 模組 (module)


有的時候可能只需要單一個程式就可以應付所有的需求,但是,也有的時候一個程式(或專案)需要使用其他程式中的功能來達成需求。此時,可以將其他程式視為一個模組,透過使用 import 關鍵字來將這個模組匯入到目前的程式中。

import 模組名稱
  • 參考檔案:module
  • shapes.py
# 定義全域變數
CHAR = '*'


# 定義函數
def rectangle(hight=2, width=2):
    for i in range(0, hight):
        output = ''

        for j in range(0, width):
            output += CHAR

        print(output)


def square(side=2):
    rectangle(side, side)


def triangle(hight=2):
    for i in range(0, hight):
        output = ''

        for j in range(0, i+1):
            output += CHAR

        print(output)

首先,在 shapes.py 中定義一個全域變數CHAR = '*',表示被用來顯示形狀的符號。接著,定義了三個形狀的函數,分別為矩形\(rectangle)、正方形(square)及三角形(triangle)等形狀函數。

  • main.py
# 匯入模組
import shapes


# 使用模組
print(shapes.CHAR)
print()
shapes.square(3)
print()
shapes.triangle(5)
print()
shapes.rectangle(3, 8)


# 執行結果
*

***
***
***

*
**
***
****
*****

********
********
********

當建立好 shapes.py 檔案之後,可以再建立一個main.py檔案。然後,使用 import 關鍵字將 shapes.py 匯入在此檔案中。之後,就可以使用 shapes.py 檔案中的全域變數及形狀函數。

只匯入你想要的東西

from 模組名稱 import 模組的部份內容
# 定義函數
def get_description():
    from random import choice

    possibilities = ['rain', 'snow', 'sleet', 'fog', 'sun', 'who knows']
    return choice(possibilities)

首先,在 report.py 檔案中定義 get_description() 函數,在此函數中使用「from ... import ...」等關鍵字,從隨機模組 random 中匯入其中一個部份 choice()。按者,利用 choice() 隨機選擇及回傳 possibilities 中的一個資料。

  • main.py
# 匯入模組
import report as wr    # 做用 as 給所匯入的模組一個別名


# 使用模組
description = wr.get_description()
print("Today's weather:", description)


# 執行多次的結果
Today's weather: sun

Today's weather: who knows

Today's weather: sleet

在 main.py 檔案中,利用「import ... as ...」等關鍵字,匯入 report 模組並且給予一個別命。隨後,可以使用 「別命.函數」,即wr.get_description(),來得一個隨機結果及顯示。

如何匯入

如果所要匯入的模組在程式中許多地方會被使用到,則可以在函數外匯入模組。若只有在有限範圍內會使用到該模組,例如:只有在某一個函數內會使用到,則可以僅在該有限範圍內匯入模組。此外,有些人也會在程式檔的開頭匯入所明會使用到的模組,這個方式可以清楚呈現跟其他模組之間的關係。

對於何時使用「import」或「from ... import ...」,這可以根據個人最容易理解的方式或是一個團隊對於匯入模組的約定即可。對於何時使用「as」給予模組一個別命,當所匯入的多個模組中有函數命名稱重複或是有需要用容易記憶或是使用簡短名稱時,則可以考慮使用別命。

參考資料

  • Python自動化的樂趣, 第二章, Al Sweigart 著、H&C 譯, 碁峰
  • Python編程入門第3版(簡), 第五章, Toby Donaldson著, 人民郵電出版社
  • 精通Python, 第五章, Bill Lubanovic著, 賴屹民譯, 歐萊禮

results matching ""

    No results matching ""