什麼是包 包也是一種模塊,但本質上就是一個文件夾 對於使用者而言 使用方式和模塊沒有任何區別 本質上就是一個文件夾 不一樣之處在於 多了一個__init__.py 叫包的初始化文件import導入模塊時發生了三件事情1.建立名稱空間2.執行模塊py文件 加載名稱3.在執行文件產生新的名稱 指向模塊在導入包的時候 因爲包其實是一個文件夾 不能被執行 因此包中須要提供__init__.py文件該文件用於表明這個包因此上面import pack 實際上時執行了pack下的__init___.py 導入了這個名稱__init__.py文件的做用? ****** 說白了就是導入該包下的全部模塊 這樣一來使用包的人 用起來很是簡單 無需關心包中的文件結構 只要導入了包 就能使用包中的全部功能__init__.py 應該包含什麼內容? 不該該包含任何的業務邏輯 僅僅用於導入包中的模塊# 絕對導入: 以執行文件的sys.path爲起始點開始導入,稱之爲絕對導入# 優勢: 執行文件與被導入的模塊中均可以使用# 缺點: 全部導入都是以sys.path爲起始點,導入麻煩from dir0.dir1 import m1 # 執行文件中只能用絕對導入m1.f1()# 相對導入: 參照當前所在文件的文件夾爲起始開始查找,稱之爲相對導入# 符號: .表明當前所在文件的文件加,..表明上一級文件夾,...表明上一級的上一級文件夾# 優勢: 導入更加簡單# 缺點: 只能在導入包中的模塊時才能使用,不能在執行文件中用#注意: # 1. 相對導入只能用於包內部模塊之間的相互導入,導入者與被導入者都必須存在於一個包內 # 2. attempted relative import beyond top-level package # 試圖在頂級包以外使用相對導入是錯誤的, # 言外之意,必須在頂級包內使用相對導入,每增長一個.表明跳到上一級文件夾,而上一級不該該超出頂級包