1. 程式人生 > >python迴圈引用的解決辦法

python迴圈引用的解決辦法

原文地址:http://blog.csdn.net/handsomekang/article/details/19010407

在python中常常會遇到迴圈import即circular import的問題。

現實中經常出現這種滑稽的情況,

安裝無線網絡卡的時候,需要上網下載網絡卡驅動..

安裝壓縮軟體的時候,從網上下載的壓縮軟體安裝程式居然是被壓縮了的..

 

迴圈依賴就類似於這種情況。

 

舉個栗子,

在models.py中,

  1. from server import db  
  2. class User(db.Model):  
  3.     pass  


在server.py中,

  1. from flask import Flask  
  2. from flask.ext.sqlalchemy import SQLAlchemy  
  3. app = Flask(__name__)  
  4. app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'  
  5. db = SQLAlchemy(app)  
  6. from models import User  

這樣就產生了迴圈import的問題。

 

解決迴圈import的方法主要有幾種。

1.延遲匯入(lazy import)

即把import語句寫在方法或函式裡面,將它的作用域限制在區域性。

這種方法的缺點就是會有效能問題。

 

2.將from xxx import yyy改成import xxx;xxx.yyy來訪問的形式

 

3.組織程式碼

出現迴圈import的問題往往意味著程式碼的佈局有問題。

可以合併或者分離競爭資源。

  • 合併的話就是都寫到一個檔案裡面去。
  • 分離的話就是把需要import的資源