1. 程式人生 > >Python 將模組作為指令碼來執行

Python 將模組作為指令碼來執行

簡述

在 Python 中,模組的使用方式有很多種,可以在 Python shell 中使用,也可以將其用於另外一個模組中。雖然形式不同,但本質沒什麼區別,均屬於匯入。

除匯入之外,還可以將模組作為一個獨立的指令碼來執行。

|

將模組作為指令碼來執行

當使用下述方式執行 Python 模組時:

python script.py

模組中的程式碼將被執行,就像匯入它一樣,但 __name__ 將被設定為 __main__

例如,有一個模組 calc.py,裡面定義了一個 add() 函式。如果要測試這個函式,可以這樣編寫:

def add(a, b):
    return
a + b if __name__ == '__main__': print('test: 2 + 3 =', add(2, 3))

然後,就可以將其作為一個指令碼來執行:

$ python calc.py 
test: 2 + 3 = 5

注意: 程式碼中的 if 語句很有必要,這樣既可以將模組作為獨立的指令碼執行,又可以將其作為可匯入的模組來使用,請參考:Python 中 name == ‘main’ 的作用

命令列引數

倘若引數是可變的,該怎麼辦?

很簡單,命令列傳參 - 這是對上述形式的一個擴充套件:

python script.py <arguments>

這時,要解析傳遞的引數,需要用到 sys 模組:

def add(a, b):
    return a + b

if __name__ == '__main__':
    import sys
    args = sys.argv  # 用於獲取命令列引數
    print(args)
    print(add(int(args[1]), int(args[2])))

沒錯,通過 sys.argv 可以獲取命令列引數,它是一個 list 型別。sys.argv[0] 表示程式碼本身檔案路徑,引數索引從 1 開始。

使用很簡單,引數之間以空格隔開:

$ python calc.py 2
3 ['calc.py', '2', '3'] 5 $ python calc.py 4 5 ['calc.py', '4', '5'] 9

這樣,就可以傳遞任意的引數了。