2022.3.25學習筆記
2022.3.25學習筆記
- 迴圈匯入問題
- 判斷檔案型別
- 模組的查詢順序
- 絕對匯入和相對匯入
- 模組與包(簡單)
- 程式設計思想的演變
- 軟體開發目錄規範
一、迴圈匯入問題
兩個檔案互相匯入,可能出現某個名字還沒被建立就使用的情況,導致報錯,因此在程式設計中應當儘量避免迴圈匯入的情況。
如果確實需要迴圈匯入,那麼要確保雙方互相匯入使用的名字都提前定義好,也就是在匯入之前就已經存在,這是一錯再錯的方法
方式1:將匯入模組的句式寫在定義名字的的下面
方式2:將匯入模組的句式寫在函式體程式碼裡
二、判斷檔案型別
檔案型別有兩種:
(1)執行檔案
(2)被匯入檔案
這裡需要引入一個內建變數__name__ 1.當前檔案是執行檔案時 print(__name__) # 結果是__main__ 2.當前檔案是被匯入檔案時,被匯入檔案嗎,名為mdddd print(__name__) # 結果是mdddd,檔名
因此在被匯入檔案可以使用這個方法,設定判斷是執行檔案才執行的程式碼,如下:
if __name__ == '__main__': # pycharm中快捷方式:main+tab鍵
該檔案執行才會執行的程式碼
三、模組的查詢順序
順序:
記憶體>>>內建模組>>>sys.path>>>找不到會報錯
1.先從記憶體空間查詢驗證 import m1 import time time.sleep(10) # 睡眠10秒期間把m1檔案刪除 print(m1.name) # 'jaosn',正常顯示,說明已經載入到記憶體,但是再執行就會報錯 2.從內建模組查詢 假如檔名與內建模組名字衝突會怎麼樣?因為會先從內建模組查詢,所以不會匯入自己寫的檔案,因此 # 建立py檔案時不要與內建或第三方模組名衝突 3.在sys.path查詢 什麼時sys.path:相當於當前py檔案所在的檔案路徑 import sys print(sys) # 結果是是個列表,存放了很多檔案路徑,第一個是當前py檔案所在的路徑
那麼如果在上述三個空間都沒找到怎麼辦呢?
方式1:新增被呼叫檔案的絕對路徑至sys.path(類似於新增環境變數)
import sys
sys.path.append(r'/Users/jiboyuan/PycharmProjects/day18/aaa')
方式2:使用from...import...句式
from aaa import mddd # 尋找當前路徑下aaa下面的mddd.py檔案並匯入
from aaa.bbb.ccc import mddd1 # 通過點的方式進入下一層目錄
這裡呢就涉及到了絕對匯入和相對匯入了,我們繼續往下看
四、絕對匯入和相對匯入
絕對匯入:
永遠按照執行檔案所在的路徑一層層往下查詢(無腦查詢即可)
from aaa.bbb.ccc import md # 尋找當前路徑下aaa的下下層目錄中的md.py檔案
# 注意:絕對匯入只需要在執行檔案下一層層查詢即可!!!
相對匯入:
按照當前模組所在的路徑然後使用特殊符號去查詢其他模組
from . import a # 一個點表示使用當前路徑目錄中的檔案
.表示當前路徑
..表示上一層路徑
../..表示上上一層路徑
# 注意:相對匯入只能在被匯入檔案中使用!!!
因此,如果想一勞永逸,那麼就只使用絕對匯入即可!
五、包
專業角度解釋:
# 包就是內部含有__init__.py的資料夾
實際角度解釋:
# 包就是多個模組的結合體(內部存放了多個模組檔案)
目的是為了方便管理我們建立的不同檔案,一般同類型放在一起進行分類管理
在pycharm中甚至直接提供了建立包的選項:python package
本質還是資料夾裡面有一個__init__檔案
# 在匯入包的時候,索要名字其實是跟包裡面的__init__.py要
1.所以如果要直接通過包的名字使用裡面的模組,那麼需要提前在__init__中提前匯入,好處在於可以提前幫你準備好使用的名字。
2.也可以直接忽略__init__的村子啊直接使用絕對匯入,from...import...
六、程式設計思想的演變
1、小白階段
此階段寫程式碼就是在一個檔案內不停地堆疊程式碼的行數
2、函式階段
此階段寫程式碼學會了將一些既定的功能程式碼封裝起來供後面反覆使用,好處是可以重複使用,不考慮順序
3、模組階段
此階段不單單是將功能程式碼封裝成函式,並且將相似的程式碼功能拆分到不同的py檔案中方便後續使用和管理
這種演變方式,是我們由淺入深的過程,也越來越方便、快捷、高效的管理資源
七、軟體開發目錄規範
實際工作中許多程式軟體都是由很多資料夾和檔案組成的,並且這些資料夾都是有一定規範和作用的,這些就是軟體開發目錄規範
1.bin資料夾
存放程式的啟動檔案,start.py
2、conf資料夾
存放程式的配置檔案,settings.py
3、core資料夾
存放程式的核心業務,src.py
是最為重要的核心程式碼,能夠實現具體需求
4、lib資料夾
存放程式公共的功能,commom.py
5、db資料夾
存放程式的資料,userinfo.txt
6、log資料夾
存放程式的日誌記錄,log.log
7、readme文字檔案
存放程式的說明、廣告等額外的資訊
8、requirements.txt文字檔案
存放程式需要使用的第三方模組及對應的版本
注意:目錄的名字可以不一致,但是中心思想是一致的,就是為了方便管理,解耦合等