模塊:模塊是一系列功能的結合體
模塊的來源:
內置的模塊(python解釋器自帶的)
第三方(開發者編寫的模塊)
自定義的模塊(自己編寫的模塊)
模塊的四種表現形式:
1、使用python編寫的py文件(也就意味着py文件也可以稱之為模塊:一個py文件也可以稱之為一個模塊)
2、已被編譯為共享庫或DLL的C或C++擴展(了解)
3、把一系列模塊組織到一起的文件夾(文件夾下有一個__init__.py的文件,該文件夾被稱之為包) 包:是一系列py文件的結合體
4、使用C編寫並連接到python解釋器的內置模塊
為什么要使用模塊:
1、用別人寫好了的模塊(內置的或是第三方的);典型的拿來主義,提高了開發的效率
2、使用自己寫的模塊(自定義的);當程序比較龐大的時候,你的項目不可能只在一個py文件中,那么當多個文件中都需要使用相同方法的時候,可以將該公共方法寫到一個py文件中。(當其他的文件要調用了就可以直接以模塊的形式導入過去了)
注意點:導入的時候一定要區分哪個是執行文件,哪個是被導入的文件。
import導入:
導入的三個步驟:
1、運行執行文件
2、運行文件中的代碼,將產生的名字和值存放到當前文件的名稱空間中
3、在執行文件中產生一個指向名稱空間的名字
import導入:訪問模塊名稱空間中的名字統一使用:模塊名.名字
只有當幾個模塊有相同部分的時候或者屬於同一個模塊,可以使用一次性導入,要是幾個模塊沒有聯系的話,應該分多次導入。ps:模塊的導入的句式應該是在文件的開頭,當文件名字比較復雜的時候,應該學會使用as給當前模塊區別名。
from ... import ...導入:
導入的三個步驟:
1、運行執行文件
2、執行文件中的代碼,將產生的名字和值對應的放到文件的的名稱空間中
3、最后直接拿到指向被導入模塊中的某個值
缺點:
1、訪問的模塊中名字不需要加模塊名的前綴
2、在訪問模塊中的名字可能會與當前執行文件中的名字沖突
補充:
可以使用*一次性將模塊中的名字全部加載過來,但是不推薦使用這種方式,因為一些模塊中方法太多太多了,你根本不知道到底哪些名字可以使用。
__all__:可以指定所在py文件中被當作導入的時候可以限制導入者能夠拿到的名字個數。
循環導入問題的解決思路:
如果出現這種問題那么一定是你的程序設計不合理,這種問題應該在程序設計階段就應該避免。
問題解決方式:
方式一:將循環導入的句式寫在文件的最下方
方式二:函數內導入模塊
__name__的用法:當
文件被當作執行文件的時候__name__打印的結果是__main__
當文件被當作模塊導入的時候__name__打印的結果是模塊名(沒有后綴名)
模塊的查找順序:
查找順序:
1、先從內存找 2、內置中找 3、sys.path中找(環境變量)一定要分清楚誰是執行文件誰是被導入文件
sys返回的是一個列表,里面放了一些文件的路徑,但是第一個路徑永遠是文件所在的文件夾
注意:py文件的文件名不應該與模塊名(內置的、第三方的)沖突
模塊的絕對導入:
絕對導入必須依據執行文件所在的文件夾路徑為准
絕對導入無論在執行文件中還是被導入文件中都是適用的
想對導入:
.表示的是當前路徑
..表示的是上一級路徑
...表示的是上上一級路徑
注意:
相對導入不能再執行文件中使用
相對導入只能在被導入的模塊中使用,使用相對導入,就不需要考慮執行文件到底是誰了,只需要直到模塊與模塊之間路徑的關系