1、模塊基本上就是一個包含了所有定義的函數和變量的文件。爲了在其他程序中重用模塊,模塊的文件名必須以.py
爲擴展名。模塊可以從其他程序 輸入 以便利用它的功能。
# Filename: using_sys.py
import
sys
print
'The command line arguments are:'
for
i
in
sys
.argv:
print
i
print
'\n\nThe PYTHONPATH is'
,
sys
.path,
'\n'
輸出
$ python using_sys.py we are arguments
The command line arguments are:
using_sys.py
we
are
arguments
The PYTHONPATH is ['/home/swaroop/byte/code', '/usr/lib/python23.zip',
'/usr/lib/python2.3', '/usr/lib/python2.3/plat-linux2',
'/usr/lib/python2.3/lib-tk', '/usr/lib/python2.3/lib-dynload',
'/usr/lib/python2.3/site-packages', '/usr/lib/python2.3/site-packages/gtk-2.0']
首先,利用import
語句 輸入 sys
模塊。基本上,這句語句告訴Python,想要使用這個模塊。sys
模塊包含了與Python解釋器和它的環境有關的函數。
當Python執行import sys
語句的時候,它在sys.path
變量中所列目錄中尋找sys.py
模塊。如果找到了這個文件,這個模塊的主塊中的語句將被運行,然後這個模塊將能夠被 使用 。注意,初始化過程僅在 第一次 輸入模塊的時候進行。另外,“sys”是“system”的縮寫。
sys
模塊中的argv
變量通過使用點號指明——sys.argv
——這種方法的一個優勢是這個名稱不會與任何在程序中使用的argv
變量衝突。另外,它也清晰地表明瞭這個名稱是sys
模塊的一部分。
sys.argv
變量是一個字符串的 列表 。特別地,sys.argv
包含了 命令行參數 的列表,即使用命令行傳遞給程序的參數。
這裏,執行python using_sys.py we are arguments
的時候,使用python命令運行using_sys.py
模塊,後面跟着的內容被作爲參數傳遞給程序。Python爲我們把它存儲在sys.argv
變量中。
記住,腳本的名稱總是sys.argv
列表的第一個參數。所以,在這裏,'using_sys.py'
是sys.argv[0]
、'we'
是sys.argv[1]
、'are'
是sys.argv[2]
以及'arguments'
是sys.argv[3]
。注意,Python從0開始計數,而非從1開始。
sys.path
包含輸入模塊的目錄名列表。可以觀察到sys.path
的第一個字符串是空的——這個空的字符串表示當前目錄也是sys.path
的一部分,這與PYTHONPATH
環境變量是相同的。這意味着可以直接輸入位於當前目錄的模塊。否則,得把模塊放在sys.path
所列的目錄之一。
2、from...import語句
想要直接輸入argv
變量到程序中(避免在每次使用它時打sys.
),那麼可以使用from
sys import argv
語句。如果想要輸入所有sys
模塊使用的名字,那麼你可以使用from
sys import *
語句。這對於所有模塊都適用。一般說來,應該避免使用from..import
而使用import
語句,因爲這樣可以使程序更加易讀,也可以避免名稱的衝突。
3、模塊的__name__
每個模塊都有一個名稱,在模塊中可以通過語句來找出模塊的名稱。這在一個場合特別有用——就如前面所提到的,當一個模塊被第一次輸入的時候,這個模塊的主塊將被運行。假如只想在程序本身被使用的時候運行主塊,而在它被別的模塊輸入的時候不運行主塊,該怎麼做呢?這可以通過模塊的__name__屬性完成。
# Filename: using_name.py
if
__name__ ==
'__main__'
:
print
'This program is being run by itself'
else
:
print
'I am being imported from another module'
輸出
$ python using_name.py
This program is being run by itself
$ python
>>> import using_name
I am being imported from another module
>>>
__name__
,如果它是'__main__'
,這說明這個模塊被用戶單獨運行.