標籤:實現 pycharm 應該 importlib 反射 ext 添加 找不到 迴圈
模組:模組的分類:
第三方模組/擴充模組:沒在安裝python解譯器的時候安裝的那些功能
自訂模組:你寫的功能如果是一個通用的功能,那你就把它當做一個模組
內建模組:安裝python解譯器的時候跟著裝上的那些方法
什麼是模組:
- 有的功能開發人員自己無法完成,這樣的話需要藉助已經實現的函數\類來完成這些功能
- 你實現不了的功能都由別人替你實現了
- 作業系統打交道
- 和時間
- 1000取隨機數
- 壓縮一個檔案
- 和網路通訊
- 別人寫好的一組功能 檔案夾/py檔案/C語言編譯好的一些編譯檔案
為什麼要有模組?
模組的建立和匯入;
import my_module 要匯入一個py檔案的名字,但是不加.py尾碼名
import my_module 模組的名字必須要滿足變數的命名規範
一般情況下 模組都是小寫字母開頭的名字
PEP8規範:
所有的模組匯入都應該盡量放在這個檔案的開頭
模組的匯入也是有順序的
先匯入內建模組
再匯入第三方模組
最後匯入自訂模組
import
import 的時候發生了什麼
在import的時候命名空間的變換
重新命名 as
一行匯入多個模組
from ... import ...
from import 的時候發生了什麼 仍然相當於執行了整個py檔案
在import的時候命名空間的變換
重新命名 as
一行匯入多個名字 匯入了什麼 就能使用什麼 不匯入的變數 不能使用 不匯入並不意味著不存 而是沒有建立檔案到模組中其他名字的引用
from 模組 import *
* 和 __all__ 的相關性 __all__可以控制*匯入的內容
from my_module import *login()from my_module import nameprint(name)
模組相關的其他知識
1.把模組當成指令碼運行 : 從本模組中反射本模組中的變數
if __name__ == ‘__main__‘:
所有不需要調用就能執行的內容
import sysgetattr(sys.modules[__name__],‘要反射的變數名‘)
2.模組搜尋路徑 sys.path
模組沒匯入之前在哪兒? 在硬碟上
安裝python
python整個包的結構不變
它會記錄一個安裝目錄
其他所有目錄都是根據安裝目錄來寫死的
除了你當前啟動並執行指令碼所在的目錄和pycharm在你開啟項目的時候給你添加進來的項目根目錄
剩餘所有都是python內建的目錄
內建模組的匯入
第三方模組的匯入
內建模組的匯入和第三方模組的匯入都不需要你操心了
自訂的模組能否被匯入
看sys.path當中 是否存在你要匯入的檔案 所在的目錄
總結:
模組的搜尋路徑全部儲存在sys.path列表中,匯入模組的順序,是從前到後找到一個合格模組就立即停止不再向後尋找
如果要匯入的模組和當前執行的檔案同級,直接匯入即可
如果要匯入的模組和當前執行的檔案不同級,需要把要匯入模組的絕對路徑添加到sys.path列表中
3.pyc編譯檔案
python的執行
解釋 - 編譯
當一個檔案作為一個指令碼被匯入的時候
就會在這個檔案所在的目錄的__pycache__下產生一個編譯好的檔案
為了之後匯入這個檔案的時候直接讀這個編譯好的pyc檔案就可以
可以節省一些匯入時候的時間
4.重新載入模組 已經匯入的模組即便被修改在程式執行過程中也不會生效
importlib.reload(aaa) # 表示重新載入
reload這種方式可以強製程序再重新匯入這個模組一次
非常不推薦你使用
5.模組的循環參考 - 不允許
在模組的匯入中 不要產生循環參考問題
如果發生迴圈匯入了
就會發現明明寫在這個模組中的方法,確偏顯示找不到
python-模組詳解