91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python模塊的交叉引用問題怎么解決

發布時間:2022-01-04 10:25:41 來源:億速云 閱讀:250 作者:iii 欄目:大數據

本篇內容介紹了“Python模塊的交叉引用問題怎么解決”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

    首先交叉引用或是相互引用,實際上就是導入循環,關于導入循環的詳細說明,可見我摘自《python核心編程》第二版的摘抄:Python導入循環方法。

    附錄給了一種解決交叉引用的方法,試了,不行,但關于交叉引用問題本身說明的很清楚,如果不清楚什么是交叉引用,可看附錄一。

    循環引用在python圈關注的并不多,語言上沒有提供防止循環依賴的機制。 

    總的來說,應該在總體結構上避免模塊之間互相依賴,即:A依賴B,B就不要依賴A,這也是代碼重構的一個目標。 
    對于緊急情況,往往來不及對代碼大動。 
    只要找到導致循環引用的模塊(最少兩個),把引用關系搞清楚,把某個模塊讓它在真正需要的時候再導入(一般放到函數里面),或者放到代碼的最后導入,這樣就可以基本解決模塊循環依賴的問題。 

一個小竅門: 
    查看循環引用的報錯棧時,會找到兩次導入同一個模塊的文件。注意在這個附近找。

總結:

    在python開發過程中,應盡量避免導入循環(交叉引用),但是,如果你開發了大型的 Python 工程, 那么你很可能會陷入這樣的境地。

    一些比較靠譜的方法是:

        1. 把 import 語句放到方法定義的后面。

        2. 將 import 語句移到函數的內部,只有在執行到這個模塊時,才會導入相關模塊。

附錄:

一: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會產生如下錯誤:
>>> import foo
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  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
>>>

但并非是因為交叉引用而報錯,而是引用不存在!
導入一個模塊時,發現已經導入,就不會再做一次導入。
from foo import foo_var
相當于運行foo.py, 然后令foo_var = foo.foo_var
這句會發現foo已經導入,但是foo_var=1還沒有執行到,
所以bar.foo_var = foo.foo_var就會出錯。

解決辦法就是不要全局導入,可改為局部作用域內導入。

如果將from XXX import YYY改為import XXX就不會有上述錯誤了。

“Python模塊的交叉引用問題怎么解決”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

乌拉特中旗| 铜梁县| 鸡西市| 出国| 平遥县| 清苑县| 芦山县| 平原县| 内丘县| 大新县| 白玉县| 桐庐县| 子长县| 鄂托克前旗| 酒泉市| 双辽市| 许昌市| 黄平县| 贵德县| 清水河县| 延津县| 曲靖市| 永昌县| 莒南县| 五指山市| 礼泉县| 清水县| 西畴县| 永城市| 辽宁省| 天津市| 岳普湖县| 邵东县| 永泰县| 山阴县| 普安县| 卓资县| 金沙县| 翁牛特旗| 仲巴县| 五大连池市|