pythonインポートサイクルの問題
4786 ワード
djangoで関数を呼び出すと、エラーが表示されます.
発見して、このモジュールを導入して、どうして導入が成功しませんか?ヒントとして,ループを導入する問題である.「Pythonコアプログラミング」モジュールのインポートサイクルの章を開くと、見ればわかります.
単純なシーンをシミュレート
a.pyにはb.pyの関数b()を呼び出す関数a()があり、b.pyの関数c()はa()を呼び出す必要があり、ループインポートが発生します.コードは次のとおりです.
実行:python a.py、エラーは次のとおりです.
a.pyにb.b()をインポートし、bファイルをインポートするときにaファイルをインポートし、aファイルにbファイルをインポートするのはデッドサイクルであり、当然許されない.
解決方法:モジュールにインポートされた文をローカル(関数)に配置できます.
実行:python a.py、結果は次のとおりです.
can't import get_user_info
発見して、このモジュールを導入して、どうして導入が成功しませんか?ヒントとして,ループを導入する問題である.「Pythonコアプログラミング」モジュールのインポートサイクルの章を開くと、見ればわかります.
単純なシーンをシミュレート
a.pyにはb.pyの関数b()を呼び出す関数a()があり、b.pyの関数c()はa()を呼び出す必要があり、ループインポートが発生します.コードは次のとおりです.
from b import b
print '---------this is module a.py----------'
def a():
print "hello, a"
b()
a()
from a import a
print '----------this is module b.py----------'
def b():
print "hello, b"
def c():
a()
c()
実行:python a.py、エラーは次のとおりです.
zy@zy:~/code/python/test/import$ python a.py
Traceback (most recent call last):
File "a.py", line 1, in <module>
from b import b
File "/home/zy/code/python/test/import/b.py", line 1, in <module>
from a import a
File "/home/zy/code/python/test/import/a.py", line 1, in <module>
from b import b
ImportError: cannot import name b
a.pyにb.b()をインポートし、bファイルをインポートするときにaファイルをインポートし、aファイルにbファイルをインポートするのはデッドサイクルであり、当然許されない.
解決方法:
print '---------this is module a.py----------'
def a():
print "hello, a"
from b import b
b()
a()
rint '----------this is module b.py----------'
def b():
print "hello, b"
def c():
from a import a
a()
c()
実行:python a.py、結果は次のとおりです.
zy@zy:~/code/python/test/import$ python a.py
---------this is module a.py----------
hello, a
----------this is module b.py----------
---------this is module a.py----------
hello, a
hello, b
hello, a
hello, b
hello, b