當兩個或多個模組嘗試相互導入時,就會出現循環導入。雖然簡單的導入可能會順利運行,但當一個模組嘗試從另一個也嘗試從中導入的模組導入特定名稱或屬性時,就會出現問題。
直接循環導入,模組嘗試使用直接導入語句將彼此作為一個整體導入。例如:
# foo.py import bar # bar.py import foo
最初,兩個模組載入都沒有問題。但是,如果一個模組嘗試存取需要另一個模組完全載入的名稱,則可能會發生執行階段錯誤。
要避免運行時錯誤,請使用間接導入,其中模組導入屬性或特定名稱而不是整個模組。例如:
# foo.py from bar import xyz # bar.py from foo import abc
此方法允許兩個模組導入必要的屬性,而不需要完全載入它們。
Python 2 在循環導入方面表現出略有不同的行為。在某些特定場景下,例如從模組頂部導入、不使用「from」、僅使用相對導入,循環導入可能在 Python 2 中有效,但在 Python 3 中無效。
以下範例說明了Python 中允許循環導入的其他場景:
以上是如何避免 Python 中的循環導入及其後果是什麼?的詳細內容。更多資訊請關注PHP中文網其他相關文章!