1.模塊
一個.py文件就是一個模塊。這個文件的名字是:模塊名.py。由此可見在python中,文件名和模塊名的差別只是有沒有后綴。有后綴是文件名,沒有后綴是模塊名。
每個文件(每個模塊)都是一個獨立的名稱空間,也就是說可以在兩個(多個)文件中出現同名的函數。
import,from.....import...兩種導入的區別:
1.import
按模塊區分擁有獨立的命名空間,要是想使用模塊中的函數需要使用 模塊名.函數名 的方式來使用。
可以使用import.....as....為導入的模塊起一個別名,在使用這個模塊中的函數時,可以使用 別名.函數名。
2.from.....import...
將模塊的內容導入到當前的命名空間中,直接使用名字就行。
如果,被導入的模塊和當前的文件中有同名的函數,那么后者將會覆蓋前者。
什么意思呢?
這個時候就要看from.....import... (from后面跟的是模塊名,import后面跟的是具體的函數名,或是模塊中具體的變量名等)出現的位置了,如果出現在當前模塊函數之前,那么當前模塊的函數會覆蓋導入的函數,如果出現在當前函數定義之后,那么導入的函數會覆蓋當前模塊中的函數。
from.....import......可以接受as為導入的函數或是變量起別名,同樣可以導入多個函數、變量等。
from......import * 不建議使用這個方式導入模塊,可能覆蓋之前同名的函數等(這種方式不會導入以_開頭的變量或函數)。
3.共同點
python中不支持重新加載或卸載之前的導入的模塊,因此如果修改被導入的模塊,需重新啟動python程序或者是使用重新加載語句來實現 import importlib; importlib.reload(modulename)
。
當一個模塊被導入時,他的全局變量名__name__ 為模塊名,當這個模塊當做腳本執行時,全局變量名__name__為 __main__。
模塊的查找順序:內存中已經加載的模塊->內置模塊->sys.path路徑中包含的模塊。(所以我們自己開發模塊時,注意不要和已有的模塊名重復)
2.包
包的本質就是一個包含__init__.py文件的目錄。是一種通過使用‘.模塊名’來組織python模塊名稱空間的方式,也就是說在在導入包時遇到帶 點 的,這就是關於包的導入語法。
導入包,本質上是導入了包中的__init__.py文件。
包的導入形式也有,import 和 from.....import......兩種形式。
3.提示
import *
會導入除了以 _
開頭的所有變量,但是如果定義了 __all__
,那么會導入 __all__
中列出的東西。
__all__是模塊中的全局變量,列表
參考:https://www.cnblogs.com/bandaobudaoweng/p/10800864.html