模組化

      在〈模組化〉中尚無留言

Module

程式愈寫愈多愈寫愈長,到最後要修改維護除錯時,一定會忘記當初寫在那裏,為什麼要這麼寫。所以就必需把代碼切成一段一段,存放在不同的檔案中。

在Python中,每一個檔案 (.py) 就是一個模組,使用模組的好處就是提高代碼的維護性。 再者,不必從頭開始編寫程式碼。當一個模組編寫完畢,就可以讓其他專案引用。我們就經常引用其他模組,如Python內置的模組和第三方模組。

函數名或變數名在不同的模組可以重複,但模組名稱(即檔案名稱) 就不可以跟別人寫的名稱一樣。為了解決這種衝突,就可以使用不同的目錄來避開,在Python或Java中,目錄又稱為Package。

Package

存放在專案下的每個目錄,都是一個 package,而package下的檔案,使用package.file來稱呼,比如下面的架構, 就可以使用 mahaljsp.triangle來參考,這樣就可以避開與他人相同的模組名。

專案
├─ mahaljsp
│  ├─ __init__.py
│  └─ triangle.py
├─ main.py

假設 triangle.py 裏面有二個函數,如下

import math
def circle(r, angle=0):
    x = r*math.cos(r*math.pi/180)
    y = r*math.sin(r * math.pi / 180)
    return x, y
def hypotenuse(x, y):
    return pow((x*x+y*y), 0.5)

那麼在 main.py 如果要調用 circle 函數,就必需使用
from mahaljsp.triangle import circle

from mahaljsp.triangle import circle
for i in range(360):
    print(circle(10,i))

另外也可以使用
from mahaljsp import triangle

from mahaljsp import triangle
for i in range(360):
    print(triangle.circle(10,i))

每一個package 目錄下都需要有一個 __init__.py 檔,否則Python會把這個目錄當成一般的目錄,而不是一個Package。__init__.py 一般是空白檔案,但可以有Python代碼。

sys模組

在DOS Console下執行 python程式時,總會附加一些參數,比如 python first.py Hello Thomas。使用sys.argv 即可取得 first.py 及後面參數
sys.argv[0] : first.py
sys.argv[1] : Hello
sys.argv[2] : Thomas

import sys
def start():
    args=sys.argv
    for x in args:
        print(x)
if __name__== '__main__':
    f = start()

模組變數範圍

模組內的變數, 全都可以被任何地方引用,而且無法禁止被引用。但有時後引用了不該用的變數, 可能會造成錯誤。所以就在命名上作了一些不成文的規定,警告使用者 “不應該” 使用。

一般的變數 : v1=10, 表示可以被其他模組引用
不該用變數 : _v2=10, 加上一個底線, 表示不應該被其他模組引用,但還是可以被其他模組引用
特殊的變數 : __v3=10, 加上二個底線, 表示是特殊變數, 還是可以被其他模組引用

def _add(x, y):
    return x+y
def _time(x, y):
    return x*y
def math(f, x, y):
    if f==1:
        return _add(x, y)
    elif f==2:
        return _time(x, y)
    else:
        return None

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *