本章是《從到Python》系列連載的最後一章內容較簡單主要介紹Python中模塊與包的使用方法如果你對這部分內容已經比較熟悉就不要再浪費時間看了寫這一章只是為了整個系列完整而已沒什麼新的東西(本章內容主要參考了《Python精要參考》的第八章《模塊和包》)
模塊
Python的腳本都是用擴展名為py的文本文件保存的一個腳本可以單獨運行也可以導入另一個腳本中運行當腳本被導入運行時我們將其稱為模塊(module)模塊是Python組織代碼的基本方式
模塊名與腳本的文件名相同例如我們編寫了一個名為Itemspy的腳本則可在另外一個腳本中用import Items語句來導入它在導入時Python解釋器會先在腳本當前目錄下查找如果沒有則在syspath包含的路徑中查找
在導入模塊時Python會做以下三件事
() 為模塊文件中定義的對象創建一個名字空間通過這個名字空間可以訪問到模塊中定義的函數及變量
() 在新創建的名字空間裡執行模塊文件
() 創建一個名為模塊文件的對象該對象引用模塊的名字空間這樣就可以通過這個對象訪問模塊中的函數及變量如
import sys
print syspath
如果要同時導入多個模塊可以用逗號分隔如 import sys os
可以使用as關鍵字來改變模塊的引用對象名如import os as system
也可以用from語句將模塊中的對象直接導入到當前的名字空間(不創建模塊名字空間的引用對象)如from socket import gethostname
from語句支持逗號分割的對象也可以使用星號(*)代表模塊中除下劃線開頭的所有對象如from socket import *這是個懶省事的方法我是經常用不過用之前最好先搞清楚會不會覆蓋當前名字空間中的函數名等總之不是個好習慣:)
除了Python腳本(不僅限於py還包括pyc和pyo)import語句還可以導入C或擴展(已編譯為共享庫或DLL文件)包(包含多個模塊一會介紹)和內建模塊(使用C編寫並已鏈接到Python解釋器內)不過除了包另外兩個我也沒用過:(
Python解釋器在第一次import一個py文件的時候會嘗試將其編譯為字節碼文件這個文件的擴展名通常為pyc它是已經完成語法檢查並轉譯為虛擬機指令的代碼後邊的導入操作會直接讀取pyc文件而不是py文件一般而言速度會更快
包
Python的模塊可以按目錄組織為包(package)一般來說我們將多個關系密切的模塊組織成一個包以便於維護和使用同時可有效避免名字空間沖突創建一個包的步驟是建立一個名字為包名字的文件夾並在該文件夾下創建一個__init__py文件你可以根據需要在該文件夾下存放腳本文件已編譯擴展及子包
一個典型的包可能有以下結構:
package/
__init__py
subPack/
__init__py
module_py
module_py
module_py
subPack/
__init__py
module_py
module_py
……
只要目錄下存在__init__py就表明此目錄應被作為一個package處理在最簡單的例子中__init__py 是一個空文件不過一般我們都要在__init__py中做一些包的初始化動作或是設定一些變量
最常用的變量是__all__當使用包的人在用from pack import * 語句導入的時候系統會查找目錄pack下的__init__py文件中的__all__這個變量__all__是一個list包含了所有應該被導入的模塊名稱例如__all__ = [m m m] 表示當from pack import * 時會import 這三個module
如果沒有定義__all__from pack import * 不會保證所有的子模塊被導入所以要麼通過__initpy__要麼顯式地import 以保證子模塊被導入如import packm packm packm
本章小結
本章介紹了Python中模塊與包的使用方法要點如下
() 模塊是一個可以導入的Python腳本文件
() 包是一堆按目錄組織的模塊和子包目錄下的__init__py文件存放了包的信息
() 可以用import import as form import 等語句導入模塊和包
總之模塊與包是在物理上組織Python代碼復用的一種有效方式它有點類似於中的程序集(Assembly)初學Python不一定要會自己建立模塊和包但一定要學會使用各種包這正是Python的強大之處Python帶著各種各樣的battery當你想完成一項功能時最好先去搜索是不是有相關的包能夠復用(多數情況下是這樣的因為在各種領域都有太多的人在為Python作著貢獻)而且絕大多數Python包都是開源的研讀優秀的代碼也是提高編程能力的一種有效途徑
進一步閱讀的參考
《從C#到Python》系列連載到今天就全部寫完了非常感謝各位的支持鼓勵以及批評使我能夠不斷完善和提高讀完這個連載在Python的語法上應該夠應付一陣了當然結合具體的應用領域還是有很多東西需要不斷學習在此向大家推薦一些有用的讀物
[] 科學計算方面這個是我的應用Python的主陣地推薦HYRY Studio的《用Python做科學計算》(見)我個人認為非常優秀的一本原創著作(這麼好的書不知為何不正式出版欽佩作者的rp !)
[] GUI開發方面如果你用wxPython那麼肯定要看《wxPython in Action》(中文版見)而我個人主要用PyQt這方面值得推薦的讀物是柴樹杉翻譯的《PyQt 編程簡介》(見html)如果英文好還是推薦看《Rapid GUI Programming with Python and Qt》(英文pdf版地址Octpdf)
[] 開發方面這個我還沒有涉及Django的資料網上也是大把了其它的Python Web開發框架也是多如牛毛自己找找吧)
[] 方面最近准備用PyS做點小東西不過一直抽不出時間來下載了《PyS Library Reference》(中文版地址pdf)一直沒時間看呢所以不好推薦不過官方的東西應該是差不了的另外園子裡Lucker的blog上有一些關於PyS開發的不錯文章我雖收藏了但也是一直沒時間詳細看呵呵以後再說了
From:http://tw.wingwit.com/Article/program/ASP/201311/21672.html