1. 程式人生 > >python匯入模組交叉引用

python匯入模組交叉引用

   實際專案中遇到python模組相互引用問題,查資料,終於算是弄明白了。

    首先交叉引用或是相互引用,實際上就是匯入迴圈,關於匯入迴圈的詳細說明,可見我摘自《python核心程式設計》第二版的摘抄:

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

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

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

一個小竅門: 
    檢視迴圈引用的報錯棧時,會找到兩次匯入同一個模組的檔案。注意在這個附近找。

總結:

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

    一些比較靠譜的方法是:

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

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

相關推薦

python匯入模組交叉引用

   實際專案中遇到python模組相互引用問題,查資料,終於算是弄明白了。     首先交叉引用或是相互引用,實際上就是匯入迴圈,關於匯入迴圈的詳細說明,可見我摘自《python核心程式設計》第二版的摘抄:     附錄給了一種解決交叉引用的方法,試了,不行,但關於

python 匯入模組(使用程式匯入模組,並簡單對錯誤處理)

在python 中如果需要匯入一些模組,可以使用import xxx 或者使用from xx import xx 。只有這一種方式嗎,當然不是,還有一種就是使用程式碼將一些模組匯入。使用到的是 ` importlib ` 這個模組。 一般用法: import importlib imp

Revit中Dynamo程式設計——Python Script模組引用RevitApi、RevitApiUI、math庫)

Revit中Dynamo中的Python Script模組能夠自由程式設計,做Revit二次開發的人能夠很熟練的使用Revit的API,但是都是用的C#語言,而且是在Visual Studio的環境中使用的。如果能夠在Python Script模組中自由使用Re

關於Python匯入模組的搜尋路徑以及優先順序問題(Search path for python import module )

背景 這裡都是廢話,別看!!! 伺服器是多使用者使用,都對規範化操作沒啥經驗,多次出現多使用者、多版本管理問題。我希望我的使用者環境不受別人操作的干擾,在不斷的學習中也發現了一些較好的辦法

python 匯入模組和解決檔案控制代碼找不到問題

如果你退出 Python 直譯器並重新進入,你做的任何定義(變數和方法)都會丟失。因此,如果你想要編寫一些更大的程式,為準備直譯器輸入使用一個文字編輯器會更好,並以那個檔案替代作為輸入執行。這就是傳說

Python匯入模組的幾種姿勢(常規匯入, 相對匯入, 可選匯入, 本地匯入)

作為一名新手Python程式設計師,你首先需要學習的內容之一就是如何匯入模組或包。但是我注意到,那些許多年來不時使用Python的人並不是都知道Python的匯入機制其實非常靈活。在本文中,我們將探討以下話題: 常規匯入(regular imports) 使用from

Python import 匯入模組的時候為什麼引用不了子模組?

問題描述 比如匯入結巴分詞,程式碼如下: import jieba # 引入母模組 然後直接使用結巴的子模組 posseg 來標註詞性,程式碼如下: jieba.posseg.cut('中文詞性標註') 這句報異常 AttributeError: 'module'

012 python語法_匯入模組

    ''' 時間:2018/11/05 目錄: 一: 匯入模組 二: 匯入函式 三: 匯入自編 '''     匯入模組 1 系統自帶 import time impo

少說話多寫程式碼之Python學習021——匯入模組

從其他模組匯入函式時,通常我們使用 import 模組, 或者 from 模組 import 函式 如果匯入指定的幾個函式,可以這樣 from 模組 import 函式1,函式2,函式3 或者 from 模組 import * 最後一種表示從某模組中匯入所有函式。 對於匯入的模組和函式,我們

Python 模組,import匯入模組

    my_模組.py(自定義的模組): # 定義一個函式 def function1(): print("function1") name = "全域性變數" # 定義一個全域性變數 demo.py(import匯入模組。呼叫模組中的函式

python(12)---匯入模組

匯入模組的實質:就是把匯入的這個python檔案執行一次匯入模組的順序:#1、模組匯入,先從當前目錄中查詢是否有該模組,若當前目錄中沒有在從python環境變數中去找 #2、當模組不在當前目錄,也不在環境變數中時,可以手動將模組所在資料夾的目錄加到環境變數中#3、python自動將目錄加入到環境變數中

python匯入自帶模組和自定義模組

模組就是已經開發好的程式碼功能,自己直接匯入進來,直接使用。匯入分為python 或selenium 自帶的模組和自己寫的自定義模組,下面根據這兩個方向寫一下分別匯入的方法。 1.匯入自帶模組import sys #匯入sys模組,呼叫此模組時的方法 print sys.argvfrom sys impor

Python - 保留了預設2.6,安裝python3之後如何使用pip3並匯入模組到python3,pyperclip為例

很多人在剛學python時就被告知python2在2020年之後就不會被維護了,所以大家都會選擇python3。我也是。 安裝python3的時候,又害怕刪除原有的預設python2版本會影響系統。所以我選擇了安裝python3,並保留python2。 以上是沒有什麼問題。 但是今天看書

Python程式設計:importlib.import_module動態匯入模組

環境:python 3.6 檔案結構 ├── clazz │ ├── __init__.py │ ├── a.py │ └── b.py └── main.py a.py 的程式碼 def show(): print("show A") b.p

每天學一點python---模組匯入模組

    from..import        語句 import sys 如果你希望直接將        argv &nb

Linux下無法使用python匯入自定的模組

在linux 下使用python 進行程式驗證的時候,老是出現ImportError:no module name xxxx,這時候就是沒有匯入成功。若是python自帶的包,可以使用一下命令: 1.python 2.import sys 3.sys.append('路徑。。。。')

python------Socket網略程式設計+動態匯入模組

上節課程回顧:  靜態變數:與類無關,不能訪問類裡的任何屬性和方法。 類方法:只能訪問類變數。 屬性:把一個方法變成靜態屬性,    反射: __new__:先於__init__執行; __call__: 1 class Foo(object): 2

Python高階——import匯入模組

import匯入模組 1.搜尋路徑:   搜尋匯入的模組的路徑。 模組名.path 2.新增新的模組路徑:    # 確保先搜尋目標路徑 模組名.path.append(路徑) / 模組名.path.insert(0, 路徑) 3.重新匯

python學習(十六)——多型、封裝、反射、、動態匯入模組、類內建attr方法

一、多型 # 不同的例項呼叫同樣的方法,產生不同的結果 # 多型來自繼承 class H2O: def __init__(self,name,temperature): self.name=name self.temperature=

python簡說(十八)匯入模組

1、import xx import 一個模組的實質就是把這個python檔案從頭到尾執行一遍 2、import模組的查詢模組的順序 1)、從當前目錄下找 2)、sys.path python的安裝目錄 從上面2個目錄都找不到,那就報錯   1.同目錄下,直接匯入,import XXX 2.不