简明python教程 --C++程序员的视角(三):模块
模塊和包
1 python程序由包(package)、模塊(module)和函數組成。包是由一系列模塊組成的集合。模塊是處理某一類問題的函數和類的集合。函數是一段可以重復多次調用的代碼。
2 python的程序是由一個個模塊組成的。模塊把一組相關的函數或代碼組織到一個文件中,一個文件即是一個模塊。模塊由代碼、函數和類組成。每個模塊文件是一個獨立完備的命名空間,一個模塊文件不能看到其他文件定義的變量名,除非它明確地導入了那個文件,模塊文件起到了最小化命名沖突的作用。
3 導入模塊使用import和from語句(都是隱性的賦值語句),以及reload函數。陷阱:使用from導入變量,而那些變量碰巧和作用域中現有的變量同名,本地變量就會被悄悄地覆蓋掉;使用import則沒這個問題。
4 包就是一個完成特定任務的工具箱,包的作用是實現程序的重用。包必須含有一個__init__.py文件,它用于標識當前文件夾是一個包。根據功能把文件組織成子目錄,包導入會讓模塊扮演的角色更為明顯,也使代碼更具有可讀性。
5 可以導入模塊名,還可以指定目錄路徑(Python代碼的目錄就稱為包),包導入就是把計算機上的目錄變成另一個Python命名空間,包的屬性就是該目錄包含的子目錄和模塊文件。
6 當多個同名程序文件安裝在某機器上時,包導入可以偶爾用來解決導入的不確定性。導入包也使用import和from語句。
使用sys模塊
想要在其他程序中重用很多函數,就要使用模塊。模塊基本上就是一個包含了所有你定義的函數和變量的文件。為了在其他程序中重用模塊,模塊的文件名必須以.py為擴展名。
模塊可以從其他程序?輸入以便利用它的功能。模塊的用處在于它能為你在別的程序中重用它提供的服務和功能。Python附帶的標準庫就是這樣一組模塊的例子。首先,我們將學習如何使用標準庫模塊。
- 首先,我們利用import語句?輸入?sys模塊。sys是"system”的縮寫sys模塊包含了與Python解釋器和它的環境有關的函數。當Python執行import sys語句的時候,它在sys.path變量中所列目錄中尋找sys.py模塊。如果找到了這個文件,這個模塊的主塊中的語句將被運行,然后這個模塊將能夠被你?使用?。注意,初始化過程僅在我們?第一次?輸入模塊的時候進行。
- sys模塊中的argv變量通過使用點號指明——sys.argv——這種方法的一個優勢是這個名稱不會與任何在你的程序中使用的argv變量沖突。另外,它也清晰地表明了這個名稱是sys模塊的一部分。sys.argv變量是一個包含了?命令行參數?的字符串的列表,即使用命令行傳遞給你的程序的參數。如果你使用IDE編寫運行這些程序,請在菜單里尋找一個指定程序的命令行參數的方法。(在Spyder下按F6)
- 這里,當我們執行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所列的目錄之一。
?
字節編譯的.pyc文件
輸入一個模塊相對來說是一個比較費時的事情,所以Python做了一些技巧,以便使輸入模塊更加快一些。
一種方法是創建?字節編譯的文件?,這些文件以.pyc作為擴展名。字節編譯的文件與Python變換程序的中間狀態有關(是否還記得Python如何工作的介紹?)。當你在下次從別的程序輸入這個模塊的時候,.pyc文件是十分有用的——它會快得多,因為一部分輸入模塊所需的處理已經完成了。另外,這些字節編譯的文件也是與平臺無關的。
?
from..import語句
如果你想要直接輸入argv變量到你的程序中(避免在每次使用它時打sys.),那么你可以使用from sys import argv語句。如果你想要輸入所有sys模塊使用的名字,那么你可以使用from sys import *語句。這對于所有模塊都適用。
一般說來,應該避免使用from..import而使用import語句,因為這樣可以使你的程序更加易讀,也可以避免名稱的沖突。
?
模塊的__name__
當一個模塊被第一次輸入import的時候,這個模塊的主塊將被運行。假如我們只想在程序本身被使用的時候運行主塊,而在它被別的模塊輸入的時候不運行主塊,這可以通過模塊的__name__屬性完成。
每個Python模塊都有它的__name__,如果它是'__main__',這說明這個模塊被用戶單獨運行,我們可以進行相應的恰當操作。
?
制造你自己的模塊
每個Python程序也是一個模塊。你已經確保它具有.py擴展名了。記住這個模塊應該被放置在我們輸入它的程序的同一個目錄中,或者在sys.path所列目錄之一。
文件dir/untitled0.py:
文件dir/untitled1.py
下面是一個使用from..import語法的版本。
結果是一樣的:
?
dir()函數
當你為dir()提供一個模塊名的時候,它返回模塊定義的名稱列表(函數、類和變量)。如果不提供參數,它返回當前模塊中定義的名稱列表。
首先,我們來看一下在輸入的sys模塊上使用dir。我們看到它包含一個龐大的屬性列表。
接下來,我們不給dir函數傳遞參數而使用它——默認地,它返回當前模塊的屬性列表。注意,輸入的模塊同樣是列表的一部分。
為了觀察dir的作用,我們定義一個新的變量a并且給它賦一個值,然后檢驗dir,我們觀察到在列表中增加了以上相同的值。我們使用del語句刪除當前模塊中的變量/屬性,這個變化再一次反映在dir的輸出中。
關于del的一點注釋——這個語句在運行后被用來?刪除?一個變量/名稱。在這個例子中,del a,你將無法再使用變量a——它就好像從來沒有存在過一樣。結果:
from:?http://www.cnblogs.com/wei-li/archive/2012/03/25/2416291.html
總結
以上是生活随笔為你收集整理的简明python教程 --C++程序员的视角(三):模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 简明python教程 --C++程序员的
- 下一篇: 简明python教程 --C++程序员的