當專案中的模組過多,或功能劃分不夠清晰時會出現迴圈引用的問題,如下
有兩個模組modulea 和 moduleb:
'''
想最快的入門python嗎?請搜尋:"泉小朵",來學習python最快入門教程。
也可以加入我們的python學習q群:902936549,送給每一位python的小夥伴教程資料。
'''#modulea
from moduleb import b
def a():
print 'aaaaaaaa'
b()def c():
print 'cccc'
if __name__ == '__main__':
a()#moduleb
from modulea import c
def b():
print 'bbbbbbbbbb'
c()
這種情況下就會出現以下的錯誤 :
traceback (most recent call last):
file "d:/pycharmprojects/untitled2/modulea.py", line 1, in from moduleb import b
file "d:\pycharmprojects\untitled2\moduleb.py", line 2, in from modulea import c
file "d:\pycharmprojects\untitled2\modulea.py", line 1, in from moduleb import b
importerror: cannot import name b
這就是迴圈引用導致的
匯入的實質
匯入其實是要將 被匯入模組所有的頂格**都執行一遍,遇到函式和類的定義會作申明。
如果b模組中有這麼一句
print 'bbb'
你在a模組impot b時就會 執行 print 'bbb'這一句。
回到迴圈引用中,首先匯入b,進入b中,發現b中又匯入了a又回到a中,但是a又匯入b這就形成了迴圈引用。
解法1:直接匯入模組名,通過模組呼叫其中的函式
'''
想最快的入門python嗎?請搜尋:"泉小朵",來學習python最快入門教程。
也可以加入我們的python學習q群:902936549,送給每一位python的小夥伴教程資料。
'''#modulea
import moduleb
def a():
print 'aaaaaaaa'
moduleb.b()
def c():
print 'cccccc'
if __name__ == '__main__':
a()*************************************
#moduleb
import modulea
def b():
print 'bbbbbbbbbb'
modulea.c()
具體原因我也不太清楚。
解法2:使用延遲匯入(lazy import)
在需要用的函式內部匯入,或是在底部匯入
moduleb
***************
def b():
print 'bbbbbbbbbb'
c()from modulea import c
**************************
或者def b():
from modulea import c
print 'bbbbbbbbbb'
c()
解法3:重新設計**結構,將**和並或者分離
這個要看情況 而定了,將公共功能的**分離成單獨模組,或者將一些具有關係的**合併成乙個模組。
python各個模組迴圈引用問題解決辦法
當專案中的模組過多,或功能劃分不夠清晰時會出現迴圈引用的問題,如下 有兩個模組modulea 和 moduleb modulea from moduleb import b def a print aaaaaaaa b def c print cccc if name main a moduleb ...
python各個模組
os.listdir path 以list形式返回路徑下的所有檔名,傳入path時要注意一點,路徑中的反斜線最好使用兩個,使用乙個反斜線加字母容易產生反義歧義 執行結果 注意這個list是無序的 python os官方文件 sort 該函式可以給陣列,鍊錶list或者向量排序,用法 sort fir...
python 模組引用 python如何引用模組
模組實際上就是 以.py為結尾的檔案 注意點 自定義的模組盡量不要和系統模組重名 模組內部封裝了很多實用的功能,有時在模組外部呼叫就需要將其匯入,匯入模組簡單劃分,實際上就只有兩種 import from import 詳細一點劃分有五種 1,improt 模組名 呼叫 模組名.功能名 2,impo...