編寫你自己的Python模組
其實網上挺多的,編寫你自己的模組很簡單,這其實就是你一直在做的事情!這是因為每一個 Python 程式同時也是一個模組。你只需要保證它以 .py
為副檔名即可。下面的案例會作出清晰的解釋。
案例(儲存為 mymodule.py
):
def say_hi(): print('Hi, this is mymodule speaking.') __version__ = '0.1'
上方所呈現的就是一個簡單的模組。正如你所看見的,與我們一般所使用的 Python 的程式相比其實並沒有什麼特殊的區別。我們接下來將看到如何在其它 程式中使用這一模組。
要記住該模組應該放置於與其它我們即將匯入這一模組的程式相同的目錄下,或者是放置在 sys.path
所列出的其中一個目錄下。
另一個模組(儲存為 mymodule_demo.py
):
import mymodule mymodule.say_hi() print('Version', mymodule.__version__)
輸出:
$ python mymodule_demo.py Hi, this is mymodule speaking. Version 0.1
它是如何工作的
你會注意到我們使用相同的點符來訪問模組中的成員。Python 很好地重用了其中的符號,這充滿了“Pythonic”式的氣息,這使得我們可以不必學習新的方式來完成同樣的事情。
下面是一個使用 from...import
語法的範本(儲存為 mymodule_demo2.py
):
from mymodule import say_hi, __version__ say_hi() print('Version', __version__)
mymodule_demo2.py
所輸出的內容與 mymodule_demo.py
所輸出的內容是一樣的。
在這裡需要注意的是,如果匯入到 mymodule 中的模組裡已經存在了 __version__
這一名稱,那將產生衝突。這可能是因為每個模組通常都會使用這一名稱來宣告它們各自的版本號。因此,我們大都推薦最好去使用 import
語句,儘管這會使你的程式變得稍微長一些。
你還可以使用:
from mymodule import *
這將匯入諸如 say_hi
等所有公共名稱,但不會匯入 __version__
名稱,因為後者以雙下劃線開頭。
警告:要記住你應該避免使用 import 這種形式,即 `from mymodule import `。
Python 之禪
Python 的一大指導原則是“明瞭勝過晦澀”2。你可以透過在 Python 中執行
import this
來了解更多內容。
dir
函式
內建的 dir()
函式能夠返回由物件所定義的名稱列表。 如果這一物件是一個模組,則該列表會包括函式內所定義的函式、類與變數。
該函式接受引數。 如果引數是模組名稱,函式將返回這一指定模組的名稱列表。 如果沒有提供引數,函式將返回當前模組的名稱列表。
案例:
$ python>>> import sys# 給出 sys 模組中的屬性名稱>>> dir(sys) ['__displayhook__', '__doc__','argv', 'builtin_module_names','version', 'version_info']# 此處只展示部分條目# 給出當前模組的屬性名稱>>> dir() ['__builtins__', '__doc__','__name__', '__package__','sys']# 建立一個新的變數 'a'>>> a = 5>>> dir() ['__builtins__', '__doc__', '__name__', '__package__', 'a']# 刪除或移除一個名稱>>> del a>>> dir() ['__builtins__', '__doc__', '__name__', '__package__']
它是如何工作的
首先我們看到的是 dir
在被匯入的 sys
模組上的用法。我們能夠看見它所包含的一個巨大的屬性列表。
隨後,我們以不傳遞引數的形式使用 dir
函式。在預設情況下,它將返回當前模組的屬性列表。要注意到被匯入模組的列表也會是這一列表的一部分。
給了觀察 dir
函式的操作,我們定義了一個新的變數 a
併為其賦予了一個值,然後在檢查 dir
返回的結果,我們就能發現,同名列表中出現了一個新的值。我們透過 del
語句移除了一個變數或是屬性,這一變化再次反映在 dir
函式所處的內容中。
關於 del
的一個小小提示——這一語句用於刪除一個變數或名稱,當這一語句執行後,在本例中即 del a
,你便不再能訪問變數 a
——它將如同從未存在過一般。
要注意到 dir()
函式能對任何物件工作。例如執行 dir(str)
可以訪問 str
(String,字串)類的屬性。
同時,還有一個 vars()
函式也可以返回給你這些值的屬性,但只是可能,它並不能針對所有類都能正常工作。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3349/viewspace-2822535/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 如何編寫python模組Python
- 用Python編寫自己的微型RedisPythonRedis
- 看完你也想編寫自己的 react 外掛React
- 編寫自己的 TypeScript CLITypeScript
- 編寫屬於你的第一個Linux核心模組Linux
- 編寫自己的Webpack LoaderWeb
- Python使用Mechanize模組編寫爬蟲的要點解析Python爬蟲
- Python turtle 模組可以編寫遊戲,是真的嗎?Python遊戲
- 編寫Node原生模組
- 編寫自己的Babel外掛(一)Babel
- 【ningoo】編寫Perl模組Go
- 使用typescript開發angular模組(編寫模組)TypeScriptAngular
- [譯] 用 Go 編寫你自己的區塊鏈挖礦演算法!Go區塊鏈演算法
- 如何釋出你自己的React模組至NPMReactNPM
- 「模組化安裝」,定義你自己的CloudQueryCloud
- 自己編寫的(測試點總結)
- spring-boot - 編寫自己的starterSpringboot
- Swift編寫自己的API客戶端SwiftAPI客戶端
- 寫給自己的python基礎Python
- 如何編寫型別安全的CSS模組型別CSS
- 你也可以手寫自己的Promise(一)Promise
- 開始編寫自己的技術部落格...
- 為什麼我要編寫自己的UIKitUI
- 自己寫的一個小小的php登陸模組薦PHP
- 打造自己的 Python 編碼環境Python
- nginx 編寫簡單HTTP模組以及nginx http handler的hello world示例編寫NginxHTTP
- drozer模組的編寫及模組動態載入問題研究
- 編寫自己的Acunetix WVS漏洞指令碼指令碼
- DBA日常維護SQL指令碼_自己編寫的SQL指令碼
- PHP入門教程之編寫自己的PHP框架PHP框架
- 從零開始編寫自己的JavaScript框架(一)JavaScript框架
- 從零開始編寫自己的JavaScript框架(二)JavaScript框架
- 編寫自己的php擴充套件函式 (轉)PHP套件函式
- 使用 Python 建立你自己的 Shell(下)Python
- 使用 Python 建立你自己的 Shell (上)Python
- 自己編寫安裝製作程式 (轉)
- 教你在 C 語言上編寫自己的協程
- 構建自己的React UI元件庫(三):文件編寫ReactUI元件