其實網路上Python教學還挺多的,寫自己的模組很簡單,這其實就是你一直在做的事情!這是因為每一個 Python 程式同時也是一個模組。你只需要保證它以 .py 為副檔名。下面的案例會作出清晰的解釋。
案例(保存為 mymodule.py
):
import mymodule mymodule.say_hi() print('Version', mymodule.__version__)
上方所呈現的就是一個簡單的模組。正如你所看見的,與我們一般所使用的 Python 的程式相比其實並沒有什麼特殊的區別。我們接下來將看到如何在其它 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()
函數也可以傳回給你這些值的屬性,但只是可能,它並不能針對所有類別都能正常運作。
相關課程推薦:Python影片教學
以上是編寫專屬的Python模組的詳細內容。更多資訊請關注PHP中文網其他相關文章!