python的包 python的包

2021-10-11 07:36:28 字數 2212 閱讀 1497

1. 把解決一類問題的模組放在同乙個資料夾裡,這個資料夾就是包;

2. 通過import或是from...import匯入時必須遵循乙個原則:

a> 凡是在匯入時帶點的,點的左邊都必須是乙個包,否則非法;

b> 匯入後,使用時點的左邊可以是包,模組,類,函式(它們都可以用點的方式調節用自己的屬性);

c> from...import匯入時,import後面不能帶點,否則有語法錯誤,如from a import b.c是錯誤的語法;

d> from...import匯入時,import後面可以接某個模組的乙個方法,如from.glance.api.policy import get,該get是乙個函式;

3. 乙個包裡的各包之間的__inint__.py匯入包的模組時,可以使用絕對路徑和相對路徑,各有優缺點:

importos

os.makedirs('glance/api')

os.makedirs('glance/cmd')

os.makedirs('glance/db')

l=map(lambdaf:f.close() ,l)importglance

glance.api.policy.get()

建立目錄

glance/ #top-level package

├──__init__.py #initialize the glance package

├── api#subpackage for api

│ ├──__init__.py

│ ├── policy.py

│ └── versions.py

├── cmd#subpackage for cmd

│ ├──__init__.py

│ └── manage.py

└── db#subpackage for db

├──__init__.py

└── models.py

目錄結構

目錄結構

#檔案內容

#policy.py

defget():print('from policy.py')#versions.py

defcreate_resource(conf):print('from version.py:',conf)#manage.py

defmain():print('from manage.py')#models.py

defregister_models(engine):print('from models.py:',engine)

檔案內容

1> 使用絕對路徑時:

a> 在包的內部或是包的外部,只要匯入了對應包的模組(__init__.py檔案),就可以使用模組的方式;

b> 不能挪動包到另乙個目錄下,因為使用的是絕對路徑,挪動後絕對路徑就不正確了;

i : 包的__init__.py檔案的絕對路徑的匯入子包

ii: 子包的__init__.py檔案的絕對路徑匯入模組

iii: 在包glance同級目錄的指令碼中匯入包(外部匯入包),包的子包模組的方法可以正常被呼叫:

執行結果:

iiii:  在子包內部匯入其他子包的模組,可以正常除錯其方法:

2> 使用相對路徑時:

a> 可以隨意挪動包,只要能找到包的位置,就可使用包裡的模組方法;

b> 包裡的模組如果想使用包的其他模組方法,首先也只能相對路徑匯入,而不能使用絕對路徑匯入;

c> 但是使用了相對路徑,就不能在包內部直接執行,只能在包外執行方法;

i: 包的__init__.py檔案,通過相對路徑志入子包:

ii:子包的__init__.py檔案,通過相對路徑匯入子包模組:

(其它子的__init__.py檔案匯入模組同理:  from . import manage    from . import models)

iii:在子包manage.py內部匯入其他子包api,再呼叫該子包模組的方法(api.policy.get()),直接在這個子包manage.py執行指令碼時會報錯:

iiii: 在包glance的外部,匯入包,直接執行這個study.py指令碼,可以讓子包中的 api.policy.get() 指令碼 正常被執行:

3> 結合 __all__使用相對路徑時:

(其它子包cmd和db的__init__.py的**為:   __all__ = ['manage']    和    __all__ = ['models'] )

呼叫方法,與前面的相對路徑相同:

python中的包 python中的包

1.python中的包 包將有聯絡的模組組織在一起,有效避免模組名稱衝突問題,讓應用組織結構更加清晰 假定我們的包的例子有如下的目錄結構 phone init py common util.py voicedta init py pots.py isdn.py fax init py g3.py m...

python中包 python中的包

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

python導包 Python中包的匯入

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