本篇內容介紹了“Python模塊的交叉引用問題怎么解決”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!
成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設,撫順縣企業(yè)網(wǎng)站建設,撫順縣品牌網(wǎng)站建設,網(wǎng)站定制,撫順縣網(wǎng)站建設報價,網(wǎng)絡營銷,網(wǎng)絡優(yōu)化,撫順縣網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學習、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
首先交叉引用或是相互引用,實際上就是導入循環(huán),關于導入循環(huán)的詳細說明,可見我摘自《python核心編程》第二版的摘抄:Python導入循環(huán)方法。
附錄給了一種解決交叉引用的方法,試了,不行,但關于交叉引用問題本身說明的很清楚,如果不清楚什么是交叉引用,可看附錄一。
循環(huán)引用在python圈關注的并不多,語言上沒有提供防止循環(huán)依賴的機制。
總的來說,應該在總體結構上避免模塊之間互相依賴,即:A依賴B,B就不要依賴A,這也是代碼重構的一個目標。
對于緊急情況,往往來不及對代碼大動。
只要找到導致循環(huán)引用的模塊(最少兩個),把引用關系搞清楚,把某個模塊讓它在真正需要的時候再導入(一般放到函數(shù)里面),或者放到代碼的最后導入,這樣就可以基本解決模塊循環(huán)依賴的問題。
一個小竅門:
查看循環(huán)引用的報錯棧時,會找到兩次導入同一個模塊的文件。注意在這個附近找。
總結:
在python開發(fā)過程中,應盡量避免導入循環(huán)(交叉引用),但是,如果你開發(fā)了大型的 Python 工程, 那么你很可能會陷入這樣的境地。
一些比較靠譜的方法是:
1. 把 import 語句放到方法定義的后面。
2. 將 import 語句移到函數(shù)的內部,只有在執(zhí)行到這個模塊時,才會導入相關模塊。
附錄:
一:Python模塊的交叉引用問題
解讀:
How can I have modules that mutually import each other?
有下面兩個文件相互引用,Python解釋器報錯。
foo.py:
from bar import bar_var
foo_var=1
bar.py:
from foo import foo_var
bar_var=2
import foo會產(chǎn)生如下錯誤:
>>> import foo
Traceback (most recent call last):
File "
File "foo.py", line 1, in ?
from bar import bar_var
File "bar.py", line 1, in ?
from foo import foo_var
ImportError: cannot import name foo_var
>>>
但并非是因為交叉引用而報錯,而是引用不存在!
導入一個模塊時,發(fā)現(xiàn)已經(jīng)導入,就不會再做一次導入。
from foo import foo_var
相當于運行foo.py, 然后令foo_var = foo.foo_var
這句會發(fā)現(xiàn)foo已經(jīng)導入,但是foo_var=1還沒有執(zhí)行到,
所以bar.foo_var = foo.foo_var就會出錯。
解決辦法就是不要全局導入,可改為局部作用域內導入。
如果將from XXX import YYY改為import XXX就不會有上述錯誤了。
“Python模塊的交叉引用問題怎么解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關的知識可以關注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質量的實用文章!