模組
一.簡介
模組基本上就是一個包含了所有你定義的函數和變數的檔案。為了在其他程式中重用模組,模組的檔案名稱必須以.py
為副檔名。
例如:
#!/usr/bin/python<br /># Filename: using_sys.py</p><p>import sys</p><p>print 'The command line arguments are:'<br />for i in sys.argv:<br /> print i</p><p>print '\n\nThe PYTHONPATH is', sys.path, '\n'
輸出為:
$ python using_sys.py we are arguments<br />The command line arguments are:<br />using_sys.py<br />we<br />are<br />arguments</p><p>The PYTHONPATH is ['/home/swaroop/byte/code', '/usr/lib/python23.zip',<br />'/usr/lib/python2.3', '/usr/lib/python2.3/plat-linux2',<br />'/usr/lib/python2.3/lib-tk', '/usr/lib/python2.3/lib-dynload',<br />'/usr/lib/python2.3/site-packages', '/usr/lib/python2.3/site-packages/gtk-2.0']</p><p>
二.位元組編譯的.pyc檔案
輸入一個模組相對來說是一個比較費時的事情,所以Python做了一些技巧,以便使輸入模組更加快一些。一種方法是建立位元組編譯的檔案,這些檔案以.pyc
作為副檔名。位元組編譯的檔案與Python變換程式的中間狀態有關。當你在下次從別的程式輸入這個模組的時候,.pyc
檔案是十分有用的——它會快得多,因為一部分輸入模組所需的處理已經完成了。另外,這些位元組編譯的檔案也是與平台無關的。
三.from..import語句
如果你想要直接輸入argv
變數到你的程式中,那麼你可以使用from sys import argv
語句。如果你想要輸入所有sys
模組使用的名字,那麼你可以使用from sys import *
語句。這對於所有模組都適用。一般說來,應該避免使用from..import
而使用import
語句,因為這樣可以使你的程式更加易讀,也可以避免名稱的衝突。
四.模組的__name__
每個模組都有一個名稱,在模組中可以通過語句來找出模組的名稱。,當一個模組被第一次輸入的時候,這個模組的主塊將被運行。假如我們只想在程式本身被使用的時候運行主塊,而在它被別的模組輸入的時候不運行主塊,關於這點,這可以通過模組的__name__屬性完成。
#!/usr/bin/python<br /># Filename: using_name.py</p><p>if __name__ == '__main__':<br /> print 'This program is being run by itself'<br />else:<br /> print 'I am being imported from another module' </p><p>
輸出為:
$ python using_name.py<br />This program is being run by itself</p><p>$ python<br />>>> import using_name<br />I am being imported from another module<br />>>> </p><p>
每個Python模組都有它的__name__
,如果它是'__main__'
,這說明這個模組被使用者單獨運行,我們可以進行相應的恰當操作。
五.自己創作模組
例如:
寫一個module
#!/usr/bin/python<br /># Filename: mymodule.py</p><p>def sayhi():<br /> print 'Hi, this is mymodule speaking.'</p><p>version = '0.1'</p><p># End of mymodule.py </p><p>
進行使用
#!/usr/bin/python<br /># Filename: mymodule_demo.py</p><p>import mymodule</p><p>mymodule.sayhi()<br />print 'Version', mymodule.version </p><p>
輸出為:
$ python mymodule_demo.py<br />Hi, this is mymodule speaking.<br />Version 0.1 </p><p>
在這裡也可以使用from..import來進行調用
例如:
#!/usr/bin/python<br /># Filename: mymodule_demo2.py</p><p>from mymodule import sayhi, version<br /># Alternative:<br /># from mymodule import *</p><p>sayhi()<br />print 'Version', version
輸出相同.
六.dir()函數
你可以使用內建的dir
函數來列出模組定義的標識符。標識符有函數、類和變數。
例如:
$ python<br />>>> import sys<br />>>> dir(sys) # get list of attributes for sys module<br />['__displayhook__', '__doc__', '__excepthook__', '__name__', '__stderr__',<br />'__stdin__', '__stdout__', '_getframe', 'api_version', 'argv',<br />'builtin_module_names', 'byteorder', 'call_tracing', 'callstats',<br />'copyright', 'displayhook', 'exc_clear', 'exc_info', 'exc_type',<br />'excepthook', 'exec_prefix', 'executable', 'exit', 'getcheckinterval',<br />'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding',<br />'getrecursionlimit', 'getrefcount', 'hexversion', 'maxint', 'maxunicode',<br />'meta_path','modules', 'path', 'path_hooks', 'path_importer_cache',<br />'platform', 'prefix', 'ps1', 'ps2', 'setcheckinterval', 'setdlopenflags',<br />'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout',<br />'version', 'version_info', 'warnoptions']<br />>>> dir() # get list of attributes for current module<br />['__builtins__', '__doc__', '__name__', 'sys']<br />>>><br />>>> a = 5 # create a new variable 'a'<br />>>> dir()<br />['__builtins__', '__doc__', '__name__', 'a', 'sys']<br />>>><br />>>> del a # delete/remove a name<br />>>><br />>>> dir()<br />['__builtins__', '__doc__', '__name__', 'sys']<br />>>> </p><p>