您好,登錄后才能下訂單哦!
這期內容當中小編將會給大家帶來有關python packages有什么用,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。
package指的就是包,它是一個有層次的文件目錄結構,它定義了由n個模塊或n個子包組成的python應用程序執行環境。通俗一點:包是一個包含__init__.py 文件的目錄,該目錄下一定得有這個__init__.py文件和其它模塊或子包。
但是這會分為兩種情況,第一種情況是一個空的__init__.py文件,另外一個情況是寫了代碼的__init__.py文件。不管是空的還是有內容的,這個目錄都會被認為是一個package,這是一個標識。
package的初始化工作
一個package 被導入,不管在什么時候__init__.py的代碼都只會被執行一次
>>> import package hello world >>> import package >>> import package
由于 package 被導入時 __init__.py 中的可執行代碼會被執行,所以小心在 package 中放置你的代碼,盡可能消除它們產生的副作用,比如把代碼盡可能的進行封裝成函數或類。
__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文件內有一個函數
def bar(): print("Hello, function 'bar' from module 'a' calling")
在b.py文件內有一個函數
def foo(): print("Hello, function 'foo' from module 'b' calling")
然后我們添加一個空的__init__.py 文件在simple_package里面。
我們看下,當我們import simple_package的時候到底會發生什么事情(在simple_package內激活Python shell或者simple_package的路徑被包含在python的sys.path或者在PYTHONPATH的環境變量中)
>>> import simple_package >>> >>> simple_package <module 'simple_package' from '/home/bernd/Dropbox (Bodenseo)/websites/python-course.eu/examples/simple_package /__init__.py'> >>> >>> simple_package.a Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'a' is not defined >>> >>> simple_package.b Traceback (most recent call last): File "<stdin>", line 1, in <module> NameError: name 'b' is not defined
我們可以看到simple_package已經被成功導入,但是a.py和b.py并沒有被導入
當然了,如果你希望使用import simple_package后自動加載a或者b 模塊,這里有兩種辦法。
第一種就是在__init__.py內導入a或者b模塊,然后保存再激活python的交互環境
#__init__.py import a import b
當你再次嘗試import simple_package后,就可以使用simple_package.a.bar()來使用模塊a中的bar()函數了。
第二辦法就是手動導入,當你想使用模塊a中的bar()函數時,需要手動導入
import simple_package.a as a
然后就是可以a.bar()來使用bar()函數了。
上述就是小編為大家分享的python packages有什么用了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。