1. 程式人生 > 其它 >學習python,從入門到放棄(18)

學習python,從入門到放棄(18)

學習python,從入門到放棄(18)

迴圈匯入問題

表示兩個檔案彼此匯入彼此,這時候極有可能出現某個名字還沒有被建立就使用的情況導致報錯。

如果確實需要迴圈匯入 那麼需要確保雙方使用的名字都必須提前定義,可以將匯入模組的句式寫在定義名字的下面,也可以將匯入模組的句式寫在函式體程式碼內。

判斷檔案型別

py 檔案可以被分為兩種型別,一種是執行檔案,一種是被匯入檔案。那我們如何判斷這兩種檔案呢?可以使用__name__方法,當執行檔案使用__name__方法時,返回的是__main__,當匯入檔案使用__name__方法時,返回的時檔名或者模組名。

可以使用這個方法區分被匯入程式碼和測試程式碼。

if __name__ == '__main__':

模組的查詢順序

模組和名稱空間類似,有相應的查詢順序,當使用模組時首先會從記憶體空間中查詢,如果沒找到,就會從內建模組中去查詢,最後會去 sys.path 中查詢,如果都找不到,就會報錯。

驗證先從記憶體空間中查詢

import file
import time
time.sleep(15)  # 睡眠期間將file檔案刪除
print(file.name)

驗證再從內建模組中查詢

import time
print(time)
print(time.time())

驗證 sys.path 中查詢

import sys
print(sys.path)  # ['C:\\pythonProject02', 'C:\\pythonProject02', 'C:\\PyCharm 2021.3.2\\plugins\\python\\helpers\\pycharm_display', 'C:\\Python36\\python36.zip', 'C:\\Python36\\DLLs', 'C:\\Python36\\lib', 'C:\\Python36', 'C:\\Python36\\lib\\site-packages', 'C:\\PyCharm 2021.3.2\\plugins\\python\\helpers\\pycharm_matplotlib_backend']

雖然有很多路徑,但是隻需要重點關注第一個,第一個其實就是執行檔案所在的路徑,查詢模組的時候只需要站在執行檔案所在的路徑檢視即可。

如何解決 sys.path 中沒有模組所在路徑的問題。

  • 動新增 sys.path 路徑

    import sys
    sys.path.append(r'C://pythonProject02')
    

    pycharm 會自動將專案目錄所在的路徑新增到 sys.path 中。

  • 利用from ... import ... 句式查詢.

    from aaa import file  # 從資料夾aaa中匯入file模組
    print(file.name)
    from aaa.bbb import file02  # 通過點的方式進入下一層目錄
    print(file02.name)
    

絕對匯入與相當匯入

在匯入模組的時候一切查詢模組的句式都是以執行檔案為準,無論匯入的句式是在執行檔案中還是在被匯入檔案中。匯入又分為絕對匯入和相對匯入。

  • 絕對匯入

    按照執行檔案所在的路徑一層層往下查詢。精準而優雅。但是非常慢。

  • 相對匯入

    相當匯入打破了必須參照執行檔案的所在路徑的要求,只需要考慮當前模組所在的路徑然後使用特殊符號 . 去查詢其他模組即可。

    from . import xxx
    

    相對匯入只能在被匯入檔案中使用,不能在執行檔案中使用。

包就是內部含有__init__.py的資料夾,是多個模組的結合體,內部存放了多個模組檔案。

如果想直接通過包的名字使用包裡面所有的模組 那麼需要在__init__.py中提前匯入,可以提前幫你準備好可以使用的名字。

也可以直接忽略__init__的存在使用絕對匯入即可,好處在於不需要考慮包的存在,直接當成普通資料夾即可。

程式設計思想演變

  • 小白階段

    此階段寫程式碼就是在一個檔案內不停地堆疊程式碼的行數。

  • 函式階段

    此階段寫程式碼我們學會了將一些特定功能的程式碼封裝到函式中供後續反覆呼叫

  • 模組階段

    此階段不單單是將功能程式碼封裝成函式,並且將相似的程式碼功能拆分到不同的 py 檔案中便於後續的管理。更加方便、快捷、高效的管理資源。

軟體開發目錄規範

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

  • bin 資料夾

    存放程式的啟動檔案如start.pystart.exe

  • conf 資料夾

    存放程式的配置檔案如settings.py

  • core 資料夾

    存放程式的核心業務,是程式的主體如src.py

  • lib 資料夾

    存放程式公共的功能如common.py

  • db 資料夾

    存放程式的資料如userinfo.txt

  • log 資料夾

    存放程式的日誌記錄如log.log

  • readme 文字檔案

    存放程式的說明、廣告等額外的資訊如readme.txt

  • requirements 文字檔案

    存放程式需要使用的第三方模組及對應的版本如requirements.txt

目錄的名字可以不一致,但是主要的思想是一致的,就是為了便於管理,解耦合。

總結

補充了昨天關於模組的知識,對專案的編寫也有了更深的認識,算是脫離了小白階段。