1. 程式人生 > 其它 >迴圈匯入,判斷檔案型別,模組的查詢順序,絕對匯入與相對匯入,包,軟體開發目錄規範

迴圈匯入,判斷檔案型別,模組的查詢順序,絕對匯入與相對匯入,包,軟體開發目錄規範

1. 迴圈匯入問題

# 兩個檔案彼此匯入彼此
    迴圈匯入的時候極有可能出現某個名字還沒有被建立就使用的情況導致報錯
"""在以後的程式設計生涯中 儘量去避免出現迴圈匯入的問題"""

如果確實需要迴圈匯入 那麼需要確保雙方使用的名字都必須'提前定義好'
    (一錯再錯的辦法)
  方式1:將匯入模組的句式寫在定義名字的下面
  方式2:將匯入模組的句式寫在函式體程式碼內

 

2. 判斷檔案型別

py檔案可以被分為兩種型別
    1.執行檔案
  2.被匯入檔案

有一個內建變數__name__
    當__name__所在的檔案是執行檔案的時候 結果是__main__
  當__name__所在的檔案是被匯入檔案時候 結果是檔名(模組名)

可以藉助於__name__區分被匯入的程式碼和測試程式碼
if __name__ == '__main__': 當前檔案是執行檔案的時候才會執行的子程式碼塊 """ 由於上述程式碼在很多啟動指令碼中經常使用 所以有簡寫方式 直接輸入main之後按tab鍵即可 """

 

3. 模組的查詢順序

"""
1.先從記憶體空間中查詢
2.再從內建模組中查詢
3.最後去sys.path查詢(類似於我們前面學習的環境變數)
如果上述三個地方都找不到 那麼直接報錯!!!
"""

# 1.驗證先從記憶體空間中查詢
# import python_cat
# import time
# time.sleep(15)  # 睡眠期間將python_cat檔案刪除
# print(python_cat.name) # 2.驗證再從內建模組中查詢 # import time # print(time) # print(time.time()) """強調:在建立py檔案時候一定不要跟模組名(內建、第三方)衝突!!!""" # 3.驗證sys.path(類似於我們前面學習的環境變數) import sys print(sys.path) # 結果是一個列表 裡面存放了很多路徑 """ 當記憶體中和內建中都沒有要查詢的模組時 就會去下面的路徑中挨個查詢 ['D:\\pycharn project\\pythonProject', 'D:\\pycharn project\\pythonProject', 'F:\\Program Files\\PyCharm 2020.3.3\\plugins\\python\\helpers\\pycharm_display', 'F:\\Program Files\\Python3\\python38.zip', 'F:\\Program Files\\Python3\\DLLs', 'F:\\Program Files\\Python3\\lib', 'F:\\Program Files\\Python3', 'C:\\Users\\E\\AppData\\Roaming\\Python\\Python38\\site-packages', 'C:\\Users\\E\\AppData\\Roaming\\Python\\Python38\\site-packages\\win32', 'C:\\Users\\E\\AppData\\Roaming\\Python\\Python38\\site-packages\\win32\\lib', 'C:\\Users\\E\\AppData\\Roaming\\Python\\Python38\\site-packages\\Pythonwin', 'F:\\Program Files\\Python3\\lib\\site-packages', 'F:\\Program Files\\PyCharm 2020.3.3\\plugins\\python\\helpers\\pycharm_matplotlib_backend']
""" # import python_cat """ sys.path中雖然有很多路徑 但是隻需要重點關注第一個 第一個其實就是執行檔案所在的路徑 查詢模組的時候只需要站在執行檔案所在的路徑檢視即可 """ # 如何解決 # 方式1:主動新增sys.path路徑(類似於新增環境變數) import sys sys.path.append(r'D:\\pycharn project\\pythonProject\\1\\python_cat') # import python_cat # print(python_cat.name) """ pycharm會自動將專案目錄所在的路徑新增到sys.path中 """ # 方式2:利用from...import...句式指名道姓的查詢 # from 1 import python_cat # 從資料夾aaa中匯入python_cat模組 # print(python_cat.name)

 

4. 絕對匯入與相對匯入

# 1.在匯入模組的時候一切查詢模組的句式都是以執行檔案為準
#     無論匯入的句式是在執行檔案中還是在被匯入檔案中!!!
  
# 絕對匯入
#     永遠按照執行檔案所在的路徑一層層往下查詢
# 相對匯入
#     相當匯入打破了必須參照執行檔案的所在路徑的要求 只需要考慮當前模組所在的路徑然後使用特殊符號.去查詢其他模組即可
#   from . import a
#   相對匯入只能在被匯入檔案中使用 不能在執行檔案中使用
"""
預備知識
    .表示當前路徑
    ..表示上一層路徑
    ../..表示上上一層路徑
"""

 

5. 包

# 從專業的角度來解釋的話
# 包就是內部含有__init__.py的資料夾
# 從實際的角度來解釋的話
# 包就是多個模組的結合體(內部存放了多個模組檔案)
# 備註: 我們的電腦某個資料夾下面有很多不同型別的檔案
# 視訊檔案、音訊檔案、文字檔案、圖片檔案
# 為了方便管理我們會習慣性的建立不同的資料夾分類管理


# 在pycharm中甚至直接提供了建立包的選項
# 本質就是資料夾裡面有一個__init__.py檔案

"""
在匯入包的時候 索要名字其實是跟包裡面的__init__.py要
    1.如果想直接通過包的名字使用包裡面所有的模組 那麼需要在__init__.py中提前匯入
        上述方式的好處在於__init__可以提前幫你準備好可以使用的名字

    2.也可以直接忽略__init__的存在使用絕對匯入即可
        上述方式的好處在於不需要考慮包的存在 直接當成普通資料夾即可
"""

 

 

6. 軟體開發目錄規範

# 我們實際工作中編寫的程式軟體都是有很多資料夾和檔案組成的
# 這些資料夾和檔案其實都有各自存在的意義和主要功能

1.bin資料夾
    存放程式的啟動檔案     start.py
2.conf資料夾
    存放程式的配置檔案     settings.py
3.core資料夾
    存放程式的核心業務     src.py
      就是最為重要的程式碼 能夠實現具體需求
4.lib資料夾
    存放程式公共的功能      common.py
5.db資料夾
    存放程式的資料            db.txt
6.log資料夾
    存放程式的日誌記錄    log.log
7.readme文字檔案
    存放程式的說明、廣告等額外的資訊
8.requirements.txt文字檔案
    存放程式需要使用的第三方模組及對應的版本
  
  
ps:目錄的名字可以不一致 但是主要的思想是一致的
      就是為了便於管理 解耦合...
拿到啟動檔案之後直接執行即可 無需考慮程式內部的複雜程度 便於管理
當代碼越來越多的時候 你才能體會到拆分的好處!!!