# 1.如果a文件夾所在目錄在環境變量,a文件夾中的ma模塊可以被以下方式導入 import a.ma | from a import ma # 2.如果a文件夾所在目錄在環境變量,a文件夾中的b文件夾的mb模塊可以被以下方式導入 import a.b.mb | from a.b import mb # 3.如果a文件夾所在目錄在環境變量,a文件夾中的b文件夾的mb模塊中的bbb名字要被直接導入 import a.b.mb.bbb # 錯誤:所有.左側必須是文件夾 ***** from a.b import mb.bbb # 錯誤:所有.左側必須是文件夾 from a.b.mb import bbb # 正確
# 總結: # 1.一個py文件作為自執行文件,__name__變量的值為 '__main__' # 2.一個py文件作為模塊被導入執行,__name__變量的值為 '文件(模塊)名' # 如何區別兩種方式,可以讓一個文件可以自執行,也可以被導入執行 共存 # 在這樣的py文件中寫: if __name__ == '__main__': # 自執行的邏輯 => 因為在文件作為模塊使用時 __name__為文件名,不滿足條件 pass
# 包:一系列模塊的集合體,用文件夾來管理一系列有聯系功能的模塊,該文件夾我們稱之為包,文件夾名就是包名 # 包 與 普通文件夾存在區別:包的文件夾中一定存在一個__init__.py文件 # -- py2:必須創建 py3:建議創建,不創建系統會自動創建 # __init__.py文件 # 1)產生一個全局名稱空間,提供給包的,就代表包的名稱空間 # 2)管理 包可以直接點出來使用的 名字 # 導包完成的三件事 # 1)編譯形成包中__init__.py文件的pyc文件 # 2)執行__init__.py文件,形成一個全局名稱空間,將__init__.py文件中所有名字存放其中,該名稱空間就代表包的名稱空間 # 3)在導包的文件中,產生一個與包名相同的名字,指向包的名稱空間(__init__.py文件的全局名稱空間)
# 如果只是想作為普通文件夾,py3中可以省略__init__文件,本質上文件夾也是包
# 導入的手段:1.指名道姓到某一個模塊 | 2.指名道姓到某一個模塊中的名字
# 在包中采用相對導入管理模塊或模塊中的名字 # 在包的__init__.py文件或是包中任意一個模塊中 # . 代表當前文件所在目錄 # .. 代表當前文件所在目錄的上一級目錄 # 注:.語法不能出包,因為包外的文件都能自執行,但擁有.開頭導入的文件不能自執行
