我們已經學習了如何在你的程式中定義一次函式而重用**。如果你想要在其他程式中重用很多函式,那麼你該如何編寫程式呢?你可能已經猜到了,答案是使用模組。模組基本上就是乙個包含了所有你定義的函式和變數的檔案。為了在其他程式中重用模組,模組的檔名必須以
.py為副檔名。
模組可以從其他程式匯入以便利用它的功能。這也是我們使用
python
標準庫的方法。首先,我們將學習如何使用標準庫模組。
先上**:
#!/usr/bin/python
import sys
print 'the command line arguments are:'
for i in sys.ar**:
print i
print '\n\nthe pythonpath is', sys.path, '\n'
首先,我們利用
import
語句匯入
sys模組。
sys模組包含了與
python
直譯器和它的環境有關的函式。
當python
執行import sys
語句的時候,它在
sys.path
變數中所列目錄中尋找
sys.py
模組。如果找到了這個檔案,這個模組的主塊中的語句將被執行,然後這個模組將能夠被你使用。注意,初始化過程僅在我們第一次輸入模組的時候進行。
sys.ar**
變數是乙個字串的列表,包含了命令列引數的列表。
sys.path
包含輸入模組的目錄名列表。我們可以觀察到
sys.path
的第乙個字串是空的——這個空的字串表示當前目錄也是
sys.path
的一部分,這與
pythonpath
環境變數是相同的。這意味著你可以直接輸入位於當前目錄的模組。否則,你得把你的模組放在
sys.path
所列的目錄之一。
下面我們儲存這段**為
module_sys.py
,從終端使用
python
來執行,並輸入引數
「test argument」
,如下圖所示:
上面的示例中我們通過
sys.ar**
的方式來獲取
ar**
變數中的內容,那如果我們想直接呼叫
ar**
,就可以獲取變數內容或進行方法呼叫,該如何做呢?
可以使用
from sys import ar**
語句。還有一種更簡單的方法
from sys import *
匯入sys
模組中所有可用的變數或方法。
一般說來,應該避免使用
from..import
而使用import
語句,因為這樣可以使你的程式更加易讀,也可以避免名稱的衝突。
每個模組都有乙個名稱,在模組中可以通過語句來找出模組的名稱。前面說過,當乙個模組被第一次匯入的時候,這個模組的主塊將被執行。假如我們只想在程式本身被使用的時候執行主塊,而在它被別的模組輸入的時候不執行主塊,我們該怎麼做呢?這可以通過模組的
__name__
屬性完成。
#!/usr/bin/python
if __name__ == '__main__':
print 'this program is being run by itself'
else:
print 'i am being imported from another module'
每個python
模組都有它的
__name__
,如果它是
'__main__'
,這說明這個模組被使用者單獨執行,我們可以進行相應的恰當操作。
我們直接執行該指令碼,執行結果如下:
建立你自己的模組是十分簡單的,你一直在這樣做!每個以
.py結尾的檔案都是乙個模組。
下面我們先建立乙個
mymodule.py
的檔案,內容如下:
#!/usr/bin/python
def sayhi():
print 'hi, this is mymodule speaking.'
version = '0.1'
從上面的**可以看到,它與我們普通的
python
程式相比並沒有什麼特別之處。我們接下來將看看如何在我們別的
python
程式中使用這個模組。
這個模組應該被放置在我們匯入它的程式的同乙個目錄中,或者在
sys.path
所列目錄之一。
測試**如下:
#!/usr/bin/python
import mymodule
mymodule.sayhi()
print 'version', mymodule.version
執行結果如下:
我們可以使用內建的
dir函式來列出模組定義的識別符號。識別符號有函式、類和變數。當為
dir()
提供乙個模組名的時候,它返回模組定義的名稱列表。如果不提供引數,它返回當前模組中定義的名稱列表。
先看下面的**:
#!/usr/bin/python
import sys
print dir(sys)
a=5print dir()
del a
print dir()
首先,我們來看一下在輸入的
sys模組上使用
dir。我們看到它包含乙個龐大的屬性列表。如下圖:
接下來,我們不給
dir函式傳遞引數,預設地,它返回當前模組的屬性列表。
為了觀察
dir的作用,我們定義乙個新的變數
a並且給它賦乙個值,然後檢驗
dir,我們觀察到在列表中增加了以上相同的值。我們使用
del語句刪除當前模組中的變數
/屬性,這個變化再一次反映在
dir的輸出中。結果如下:
模組的用處在於它能為你在別的程式中重用它提供的服務和功能。
python
附帶的標準庫就是這樣一組模組的例子。我們已經學習了如何使用這些模組以及如何創造我們自己的模組。
下一節我們學校異常處理。
第2.7「網路安全」—>」python黑帽程式設計」進入即可。
xuanhun521
qq群:
hacking (1
群):303242737 hacking (2
群):147098303。
Python黑帽程式設計 2 7 異常處理
異常是個很寬泛的概念,如果程式沒有按預想的執行,都可以說是異常了。遇到一些特殊情況沒處理會引發異常,比如讀檔案的時候檔案不存在,網路連線超時。程式本身的錯誤也可以算作異常,比如把字串當整數來處理,拼寫錯誤。不論是系統還是框架,都會對基本異常進行分類,比如io異常,記憶體溢位等等。很多時候,針對特有的...
Python 黑帽程式設計大綱(變化中)
教程說明 1.1 虛擬機器安裝和配置kali linux 2016 1.2 使用vscode 搭建python開發環境 1.3 python執行時與包管理工具 1.4 你必須知道的網路基礎理論 請自學 1.5 利用wireshark練習資料報解析 2.0 第二章概述 2.1 python程式設計哲學...
Python 黑帽程式設計大綱(變化中)
教程說明 1.1 虛擬機器安裝和配置kali linux 2016 1.2 使用vscode 搭建python開發環境 1.3 python執行時與包管理工具 1.4 你必須知道的網路基礎理論 請自學 1.5 利用wireshark練習資料報解析 2.0 第二章概述 2.1 python程式設計哲學...