python模組微講解(二)
python模組微講解(二)
1.迴圈匯入問題
迴圈匯入就是你匯入我、我匯入你,互相呼叫,迴圈匯入很容易出現某個名字還沒有被建立就被使用而報錯,所以在我們做專案的時候就要儘量避免迴圈匯入問題,如果避免不了,那就要確保使用的名字提前定義好,有兩種方式:
(1).將匯入模組的名字寫在定義名字的下面。
(2).將匯入模組的名字寫到函式體程式碼中。
2.判斷檔案型別
pycharm中的py檔案分為兩種型別:
(1).執行檔案
(2).被匯入檔案
有一個內建方法"__name__"可以來區別,當"__name__"方法在執行檔案中,輸出的是"__main__":
當"__name__"方法在被匯入檔案中,輸出的是被匯入的檔名:
我們在自定義模組的時候,模組中可能會寫很多的功能,我們肯定需要自己測試一下,會產生很多的測試程式碼,我們可以使用"__name__"來進行區分:
3.模組查詢順序
(1).先從記憶體空間中查詢
我們可以驗證一下,先寫一個執行檔案,再寫一個被匯入檔案,在執行檔案中匯入被匯入檔案,並匯入"time"模組,讓程式睡眠15s的時間,然後刪除被匯入檔案,發現依然可以列印,再次執行就會報錯,因為已經沒有了剛剛的被匯入檔案,記憶體中也已經清除:
import modular26 import time time.sleep(15) modular26.index()
(2).在內建模組中查詢
比如我們上述剛剛用到的time模組,就是內建模組。
這裡我們要強調一下:我們在定義py檔名的時候,儘量不要與模組名一樣,這裡的模組名是內建模組和第三方模組。
(3).在sys.path內查詢
當在記憶體空間和內建模組找不到的時候,就回去"sys.path"中查詢,我們來看看"sys.path"輸出的啥
import sys # ['F:\\Py3\\day1', 'F:\\Py3\\day1', # 'F:\\pycharm\\PyCharm 2020.3.5\\plugins\\python\\helpers\\pycharm_display', # 'F:\\Python36\\python36.zip', 'F:\\Python36\\DLLs',# ......] print(sys.path)
發現是一個列表,裡面是很多的路徑,也就是說在記憶體空間和內建模組找不到的時候,就會檢視檔案的路徑,看看有沒有我們想要的。
雖然輸出了很多路徑,但是我們重點看的就是第一個,第一個其實就是執行檔案所在的路徑,我們尋找模組的時候只需要站在執行檔案的路徑檢視即可。
那如果兩個檔案不在同一目錄下,怎麼解決呢?來看:
方式一:直接新增"sys.path"路徑:
import sys sys.path.append(r'F:\\Py3\\day1\\sss') import asd print(asd.name)
方式二:使用"from + ... + import + ..."句式直接指名道姓的新增:
from sss import asd print(asd.name)
如果檔案有多個目錄,可以通過加點的方式進入下一層:
from sss.aaa.ddd import asd print(asd.name)
4.絕對匯入與相當匯入
再匯入模組的時候,一切查詢模組的語句都是以執行檔案為準,無論匯入的句式是在執行檔案還是在被匯入檔案。
(1).絕對匯入:
按照檔案的目錄一層一層的往下尋找。
(2).相對匯入:
相對匯入打破了必須參照執行檔案的所在路徑的這一特性,只需要考慮當前模組所在的位置,然後使用特殊符號去查詢。
''' . 表示當前路徑 .. 表示上一層路徑 ../.. 表示上上一層路徑 '''
5.包
包就是多個模組的結合體,也就是說內部存放了多個模組,但是呢包有一個共同的特點,那就是內部都含有"__init__.py"的檔案。
為什麼要有這個檔案的,那是因為在我們匯入包的時候,呼叫名字的時候,其實是在呼叫"__init__.py"裡面的名字,所以呢就有兩種方法:
(1).如果想直接通過包的名字使用包裡面的所有模組,那麼需要在"__init__.py"中提前匯入。
(2).如果嫌棄上述方法麻煩,也可以使用絕對匯入
6.軟體開發目錄規範
(1).bin資料夾:
存放程式的啟動檔案
(2).conf資料夾:
存放程式的配置檔案
(3).core資料夾:
存放程式的核心業務,也就是最為重要的程式碼
(4).lib資料夾:
存放程式的資料
(5).DB資料夾:
存放程式的資料
(6).log資料夾:
存放程式的日誌記錄
(7).readme資料夾:
存放程式的說明等其他的額外資訊
(8).requirements.txt文字檔案:
存放程式需要使用的第三方模組及對應的版本
這裡是IT小白陸祿緋,歡迎各位大佬的指點!!!