Python 速查手冊

單元 7 - 模組與 __name__

Python 中,一個程式檔案就是一個模組,也就是副檔名為 .py 的檔案都是模組。

例如有一個程式檔案 demo.py ,裡頭定義一個 Demo 類別, Demo 類別有一個 demo() 方法,底下未縮排的部分為測試程式碼,變數 dDemo 型態的物件,然後 d 呼叫了 demo() 方法

class Demo:
    def demo(self):
        print("demo")

d = Demo()
d.demo()

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:demo.py
# 功能:示範定義模組
# 作者:張凱慶

在另一個程式檔案 module01.py 直接用關鍵字 import 引入 demo 模組,未縮排的部分會先被執行,因此 import 之後直接印出字串 demo

import demo

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:module01.py
# 功能:示範定義模組
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 module01.py
dmeo
$

如果希望測試程式碼不會在 import 之後就先被執行,就要先測試模組的特殊變數 __name__ 是否為 __main__ ,只要 __name__ 等於 __main__ ,就表示這個模組正在執行中,如這裡 demo2.py 中測試程式碼就放在 if __name__ 等於 __main__ 陳述之下,如果這個 if 陳述為真,就會執行測試程式碼

class Demo:
    def demo(self):
        print("demo")

if __name__ == "__main__":
    d = Demo()
    d.demo()

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:demo2.py
# 功能:示範定義模組
# 作者:張凱慶

再用另一個程式檔案 module01.pyimport demo2 ,之後就可以繼續使用 demo2 中的定義,也就是說,判斷 __name__ 是否為 __main__ 讓 Python 程式檔案可以當成放各種定義之用,也能直接當作執行程式

import demo2

d = demo2.Demo()
d.demo()

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:module02.py
# 功能:示範定義模組
# 作者:張凱慶

於命令列執行以上程式,結果如下

$ python3 module02.py
dmeo
$

注意以上使用 Demo 用連用模組名稱 demo2 ,如果不想連用模組名稱,就要用 fromimport ,例如

from demo2 import Demo

d = Demo()
d.demo()

#《程式語言教學誌》的範例程式
# http://kaiching.org/
# 檔名:module03.py
# 功能:示範定義模組
# 作者:張凱慶

每一個模組都是執行程式,於命令列直接用 Python 指令 python3 執行 demo2.py ,此時 __name__ 就會是 __main__ ,因此會執行底下縮排的程式碼

$ python3 module03.py
demo
$

上一頁: 6.13 物件模型
Python 速查手冊 - 目錄
下一頁: 單元 8 - 套件與組織程式庫
回 Python 教材首頁