這篇文章帶給大家的內容是關於python中包是什麼?有什麼作用? python中包的介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有幫助。
1.什麼是套件?
套件是一種透過".模組名稱"來組織python模組名稱空間的方式.我們穿件的每個資料夾都可以被稱為包.
但是要注意, 在python2中規定. 包內必須存在__init__.py檔.
創建包的目的不是為了運行, 而是被導入使用. 包只是一種形式而已,包的本質就是一種模組.
2.包的作用?
##包的本質就是一個資料夾,那麼資料夾唯一的功能就是將文件組織起來,隨著功能越寫越多,我們無法將所有功能都放在一個資料夾中,於是我們使用模組去組織功能,隨著模組越來越多,我們就需要用資料夾將模組檔案組織起來,以此來提高程式的結構性和可維護性.接下來建立一些套件用來後面的學習.套件很好創建,只需要一個資料夾,有__init__.py就可以了.import os os.makedirs('glance/api') os.makedirs('glance/cmd') os.makedirs('glance/db') l = [] l.append(open('glance/__init__.py','w')) l.append(open('glance/api/__init__.py','w')) l.append(open('glance/api/policy.py','w')) l.append(open('glance/api/versions.py','w')) l.append(open('glance/cmd/__init__.py','w')) l.append(open('glance/cmd/manage.py','w')) l.append(open('glance/db/__init__.py','w')) l.append(open('glance/db/models.py','w')) map(lambda f:f.close() ,l)
#policy.py def get(): print('from policy.py') #versions.py def create_resource(conf): print('from version.py: ',conf) #manage.py def main(): print('from manage.py') #models.py def register_models(engine): print('from models.py: ',engine)
import glance.db.models glance.db.models.register_models('mysql') from glance.api.policy import get get()
3.__init__.py是做什麼的?
不論我們使用哪種方式導入一個包, 只要是第一次導入套件或是套件的任何其他部分, 都會先執行__init__.py檔.這個檔案可以是空的, 但是也可以存放一些初始化的程式碼.那麼我們之前用的from xxx import * 能用在包的呼叫上嗎?可以,我們要在__init__.py檔中給出__all__來確定*導入的內容.print("我是glance的__init__.py⽂件. ") x = 10 def hehe(): print("我是呵呵") def haha(): print("我是哈哈") __all__ = ['x', "hehe"]
from glance import * print(x) # OK hehe() # OK haha() # 报错. __all__⾥没有这个⻤东⻄
# 在glance/api/version.py #绝对导⼊ from glance.cmd import manage manage.main() #相对导⼊ # 这种情形不可以在versions中启动程序. # attempted relative import beyond top-level package from ..cmd import manage manage.main()
# 在policy.py import versions
#如果我們程序的入口時policy,那此時程序是沒有任何問題的.但是如果我們在glance外面import了glance中的policy就會報錯.
原因是如果在外面訪問policy的時候.sys.path中的路徑就是外面.所以根本就不能直接找到versions模組.所以一定會報錯:
ModuleNotFoundError: No module named 'versions'
# 在test.py中 import glance
以上是python中包是什麼?有什麼作用? python中包的介紹的詳細內容。更多資訊請關注PHP中文網其他相關文章!