python中的包 python中的包

2021-10-11 12:51:35 字數 2342 閱讀 8078

1.python中的包

包將有聯絡的模組組織在一起,有效避免模組名稱衝突問題,讓應用組織結構更加清晰

假定我們的包的例子有如下的目錄結構:

phone/

__init__.py

common_util.py

voicedta/

__init__.py

pots.py

isdn.py

fax/

__init__.py

g3.py

mobile/

__init__.py

analog.py

igital.py

pager/

__init__.py

numeric.py

phone 是最頂層的包,voicedta 等是它的子包。 我們可以這樣匯入子包:

import phone.mobile.analog

phone.mobile.analog.dial()

你也可使用 from-import 實現不同需求的匯入

第一種方法是只匯入頂層的子包,然後使用屬性/點操作符向下引用子包樹:

from phone import mobile

mobile.analog.dial('555-1212')

from phone.mobile import analog

analog.dial('555-1212')

事實上,你可以一直沿子包的樹狀結構匯入:

from phone.mobile.analog import dial

dial('555-1212')

在我們上邊的目錄結構中,我們可以發現很多的 __init__.py 檔案。這些是初始化模組,from-import 語句匯入子包時需要用到它。 如果沒有用到,他們可以是空檔案。

包同樣支援 from-import all 語句:

from package.module import *

然而,這樣的語句會匯入哪些檔案取決於作業系統的檔案系統。所以我們在__init__.py 中加入 __all__ 變數。該變數包含執行這樣的語句時應該匯入的模組的名字。它由乙個模組名字串列表組成.。

2. __all__

python的moudle是很重要的乙個概念,moudle裡一般都會有乙個__init__.py檔案。有的__init__.py中是空白,有的卻會有__all__引數。

如果其他頁面import 的時候如果__init__.py是空白的,可以直接import到moudle的所有函式。而如果__init__.py中定義了__all__,則import的時候只會匯入__all__部分定義的內容。

例如,我們可以這樣組織乙個package:

package1/

__init__.py

subpack1/

__init__.py

module_11.py

module_12.py

module_13.py

subpack2/

__init__.py

module_21.py

module_22.py

__init__.py可以為空,只要它存在,就表明此目錄應被作為乙個package處理。當然,__init__.py中也可以設定相應的內容

現在我們在module_11.py中定義乙個函式:

def funa():

print "funca in module_11"

在頂層目錄(也就是package1所在的目錄,當然也參考上面的介紹,將package1放在直譯器能夠搜尋到的地方)執行python:

>>>from package1.subpack1.module_11 import funca

>>>funca()

funca in module_11

這樣,我們就按照package的層次關係,正確呼叫了module_11中的函式。

細心的同學會發現,有時在import語句中會出現萬用字元*,匯入某個module中的所有元素,這是怎麼實現的呢?

答案就在__init__.py中。我們在subpack1的__init__.py檔案中寫

__all__ = ['module_13', 'module_12']

然後進入python

>>>from package1.subpack1 import *

>>>module_11.funca()

traceback (most recent call last):

file "", line 1, in

importerror: no module named module_11

也就是說,以*匯入時,package內的module是受__init__.py限制的。

python中包 python中的包

使用模組可以避免函式名和變數名引發的衝突,那麼如果模組名重複怎麼辦?在python中,提出了包的概念 package 的概念,包是乙個分層次的目錄結構,它將一組功能相近的模組組織在乙個目錄下,這樣既起到了規範 的作用,又能避免模組重名引發的衝突。說明 包簡單的理 解就是 資料夾 只不過是在該資料夾下...

python中閉包 python中的閉包

一 定義 如果在乙個內部函式裡,對在外部作用域 但不是在全域性作用域 的變數進行引用,那麼內部函式就被認為是閉包 closure 這個定義是相對直白的,閉包有三個條件 1.函式巢狀 2,內部函式呼叫外部函式的變數 3.返回內部函式 defa a defb b s a breturnsreturnb ...

python導包 Python中包的匯入

15 june 2015 當你從python直譯器退出後再重新進入,之前所寫的 包括變數 函式都已經不存在了,如果你想週期性的執行這些功能但是並不想每次都將這些 重新輸入一遍,你可以將這些 儲存成檔案在本地進行儲存 也就是指令碼 當你寫的程式規模越來越大,維護起來越發吃力,你或許會想把它分割為不同功...