Python自定义模块
Python自定義模塊
到目前為止,讀者已經掌握了導入 Python 標準庫并使用其成員(主要是函數)的方法,接下來要解決的問題是,怎樣自定義一個模塊呢?
前面章節中講過,Python 模塊就是 Python 程序,換句話說,只要是 Python 程序,都可以作為模塊導入。例如,下面定義了一個簡單的模塊(編寫在 demo.py 文件中):
name = "張三" add = "zhangsan" print(name,add) def say():print("人生苦短,我學Python!") class CLanguage:def __init__(self,name,add):self.name = nameself.add = adddef say(self):print(self.name,self.add)可以看到,我們在 demo.py 文件中放置了變量(name 和 add)、函數( say() )以及一個 Clanguage 類,該文件就可以作為一個模板。
但通常情況下,為了檢驗模板中代碼的正確性,我們往往需要為其設計一段測試代碼,例如:
say() clangs = CLanguage("李四","lisi") clangs.say()運行 demo.py 文件,其執行結果為:
張三 zhangsan 人生苦短,我學Python! 李四 lisi通過觀察模板中程序的執行結果可以斷定,模板文件中包含的函數以及類,是可以正常工作的。
在此基礎上,我們可以新建一個 test.py 文件,并在該文件中使用 demo.py 模板文件,即使用 import 語句導入 demo.py:
import demo注意,雖然 demo 模板文件的全稱為 demo.py,但在使用 import 語句導入時,只需要使用該模板文件的名稱即可。
此時,如果直接運行 test.py 文件,其執行結果為:
張三 zhangsan 人生苦短,我學Python! 李四 lisi可以看到,當執行 test.py 文件時,它同樣會執行 demo.py 中用來測試的程序,這顯然不是我們想要的效果。正常的效果應該是,只有直接運行模板文件時,測試代碼才會被執行;反之,如果是其它程序以引入的方式執行模板文件,則測試代碼不應該被執行。
要實現這個效果,可以借助 Python 內置的 name 變量。當直接運行一個模塊時,name 變量的值為 main;而將模塊被導入其他程序中并運行該程序時,處于模塊中的 name 變量的值就變成了模塊名。因此,如果希望測試函數只有在直接運行模塊文件時才執行,則可在調用測試函數時增加判斷,即只有當 name ==‘main’ 時才調用測試函數。
因此,我們可以修改 demo.py 模板文件中的測試代碼為:
if __name__ == '__main__':say()clangs = CLanguage("李四","lisi")clangs.say()這樣,當我們直接運行 demo.py 模板文件時,其執行結果不變;而運行 test.py 文件時,其執行結果為:
李四 lisi顯然,這里執行的僅是模板文件中的輸出語句,測試代碼并未執行。
自定義模塊編寫說明文檔
我們知道,在定義函數或者類時,可以為其添加說明文檔,以方便用戶清楚的知道該函數或者類的功能。自定義模塊也不例外。
為自定義模塊添加說明文檔,和函數或類的添加方法相同,即只需在模塊開頭的位置定義一個字符串即可。例如,為 demo.py 模板文件添加一個說明文檔:
''' demo 模塊中包含以下內容: name 字符串變量:初始值為“張三” add 字符串變量:初始值為“zhangsan” say() 函數 CLanguage類:包含 name 和 add 屬性和 say() 方法。 '''在此基礎上,我們可以通過模板的 doc 屬性,來訪問模板的說明文檔。例如,在 test.py 文件中添加如下代碼:
import demo print(demo.__doc__)程序運行結果為:
張三 zhangsandemo 模塊中包含以下內容:
name 字符串變量:初始值為“張三” add 字符串變量:初始值為“zhangsan” say() 函數 CLanguage類:包含 name 和 add 屬性和 say() 方法。總結
以上是生活随笔為你收集整理的Python自定义模块的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: kettle使用教程(超详细)
- 下一篇: python网络爬虫从入门到精通吕云翔_