這期內容當中小編將會給大家?guī)碛嘘Ppython packages有什么用,文章內容豐富且以專業(yè)的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
讓客戶滿意是我們工作的目標,不斷超越客戶的期望值來自于我們對這個行業(yè)的熱愛。我們立志把好的技術通過有效、簡單的方式提供給客戶,將通過不懈努力成為客戶在信息化領域值得信任、有價值的長期合作伙伴,公司提供的服務項目有:申請域名、網(wǎng)頁空間、營銷軟件、網(wǎng)站建設、金牛網(wǎng)站維護、網(wǎng)站推廣。
package指的就是包,它是一個有層次的文件目錄結構,它定義了由n個模塊或n個子包組成的python應用程序執(zhí)行環(huán)境。通俗一點:包是一個包含__init__.py 文件的目錄,該目錄下一定得有這個__init__.py文件和其它模塊或子包。
但是這會分為兩種情況,第一種情況是一個空的__init__.py文件,另外一個情況是寫了代碼的__init__.py文件。不管是空的還是有內容的,這個目錄都會被認為是一個package,這是一個標識。
package的初始化工作
一個package 被導入,不管在什么時候__init__.py的代碼都只會被執(zhí)行一次
>>> import package hello world >>> import package >>> import package
由于 package 被導入時 __init__.py 中的可執(zhí)行代碼會被執(zhí)行,所以小心在 package 中放置你的代碼,盡可能消除它們產(chǎn)生的副作用,比如把代碼盡可能的進行封裝成函數(shù)或類。
__init__.py內的導入順序
當我嘗試導入
from package import something
import語句會首先檢查something是不是__init__.py的變量,然后檢查是不是subpackage,再檢查是不是module,最后拋出ImportError。
所以檢查順序如下:
(1)__init__.py 文件內變量
(2)是不是package內的subpackage
(3)是不是package內的module
看個例子
我們有一個如下結構的package
在a.py文件內有一個函數(shù)
def bar(): print("Hello, function 'bar' from module 'a' calling")
在b.py文件內有一個函數(shù)
def foo(): print("Hello, function 'foo' from module 'b' calling")
然后我們添加一個空的__init__.py 文件在simple_package里面。
我們看下,當我們import simple_package的時候到底會發(fā)生什么事情(在simple_package內激活Python shell或者simple_package的路徑被包含在python的sys.path或者在PYTHONPATH的環(huán)境變量中)
>>> import simple_package >>> >>> simple_package>>> >>> simple_package.a Traceback (most recent call last): File " ", line 1, in NameError: name 'a' is not defined >>> >>> simple_package.b Traceback (most recent call last): File " ", line 1, in NameError: name 'b' is not defined
我們可以看到simple_package已經(jīng)被成功導入,但是a.py和b.py并沒有被導入
當然了,如果你希望使用import simple_package后自動加載a或者b 模塊,這里有兩種辦法。
第一種就是在__init__.py內導入a或者b模塊,然后保存再激活python的交互環(huán)境
#__init__.py import a import b
當你再次嘗試import simple_package后,就可以使用simple_package.a.bar()來使用模塊a中的bar()函數(shù)了。
第二辦法就是手動導入,當你想使用模塊a中的bar()函數(shù)時,需要手動導入
import simple_package.a as a
然后就是可以a.bar()來使用bar()函數(shù)了。
上述就是小編為大家分享的python packages有什么用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注創(chuàng)新互聯(lián)行業(yè)資訊頻道。