你已經了解了如何在你的程式中通過定義一次函式作業來重用代碼,那么如果你 想在你所撰寫的別的程式中重用一些函式的話,應該怎么辦?正如你可能想象到的那樣,答 案是模塊(Modules)
撰寫模塊有很多種方法,其中最簡單的一種便是創建一個包含函式與變數、以 .py 為后綴的 檔案
from..import 陳述句
import 陳述句允許在當前運行的程式檔案中使用模塊中的代碼,通過將函式存盤在獨立的檔案中,可隱藏程式代碼的細節,將重點放在程式的高層邏輯上,這還能讓你在眾多不同的程式中重用函式,
將函式存盤在獨立檔案中后,可與其他程 序員共享這些檔案而不是整個程式,知道如何匯入函式還能讓你使用其他程式員撰寫的函式庫,
案例
from math import sqrt
print("16開平方是", sqrt(16))
輸出
16開平方是 4.0
模塊的 __name__
每個模塊都有一個名稱,而模塊中的陳述句可以找到它們所處的模塊的名稱,這對于確定模塊 是獨立運行的還是被匯入進來運行的這一特定目的來說大為有用,正如先前所提到的,當模 塊第一次被匯入時,它所包含的代碼將被執行,
我們可以通過這一特性來使模塊以不同的方 式運行,這取決于它是為自己所用還是從其它模塊中匯入而來,這可以通過使用模塊的 __name__ 屬性來實作,
案例 (保存為 module_using_name.py ):
if __name__ == '__main__':
print('這個程式是自己運行的')
else:
print('我是從其他模塊匯入的')
輸出:
這個程式是自己運行的
在python控制臺匯入
import module_using_name
?
# 輸出:我是從其他模塊匯入的
它是如何作業的
每一個 Python 模塊都定義了它的 __name__ 屬性,如果它與 __main__ 屬性相同則代表這一 模塊是由用戶獨立運行的,因此我們便可以采取適當的行動,
撰寫你自己的模塊
撰寫你自己的模塊很簡單,這其實就是你一直在做的事情!這是因為每一個 Python 程式同時 也是一個模塊,你只需要保證它以 .py 為擴展名即可,下面的案例會作出清晰的解釋,
案例(保存為 mymodule.py ):
def say_hi():
print('Hi, mymodule 正在說話.')
__version__ = '0.1'
要記住該模塊應該放置于與其它我們即將匯入這一模塊的程式相同的目錄下,
另一個模塊(保存為 mymodule_demo.py ):
import mymodule
mymodule.say_hi()
print('Version', mymodule.__version__)
輸出
Hi, mymodule 正在說話.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__ 名稱,因為后者以雙下劃 線開頭,
警告:要記住你應該避免使用 from mymodule import * 這種形式
Python 的一大指導原則是“明了勝過晦澀”這樣的話你都不知道函式是在哪定義,哪兒匯入的
包
現在,你必須開始遵守用以組織你的程式的層次結構,變數通常位于函式內部,函式與全域 變數通常位于模塊內部,
如果你希望組織起這些模塊的話,應該怎么辦?這便是包 (Packages)應當登場的時刻,
包是指一個包含模塊與一個特殊的 __init__.py 檔案的檔案夾,后者向 Python 表明這一文 件夾是特別的,因為其包含了 Python 模塊,
| | |
| 具備一定功能的工具 | 包含很多工具、功能強大的工具箱 |
| python中的模塊 | python中的包(模塊包/程式包) |
考慮一個在 package_my 目錄下的 demo1.py、demo2.py、__init__.py 檔案,test.py 為測驗呼叫包的代碼,目錄結構如下:
test.pypackage_my|-- __init__.py|-- demo1.py|-- demo2.py
package_my/demo1.py
def runfun1():
print "我在demo1.py"
package_my/demo2.py
def runfun2():
print "我在demo2.py"
package_my/__init__.py
if __name__ == '__main__':
print '作為主程式運行'
else:
print 'package_my 初始化'
test.py
from package_my.demo1 import runfun1 from package_my.demo2 import runfun2
runfun1()
runfun2()
結果
package_my 初始化我在demo1.py我在demo2.py
總結
如同函式是程式中的可重用部分那般,模塊是一種可重用的程式,包是用以組織模塊的另一 種層次結構,Python 所附帶的標準庫就是這樣一組有關包與模塊
我們已經了解了如何使用這些模塊并創建你自己的模塊,
IT入門 感謝關注
練習地址:www.520mg.com/it
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/135410.html
標籤:Python
上一篇:07-Python函式詳解
