其實就是咱們有一個A.py文件和一個B.py文件,咱們在A.py文件導入B模塊的某個名稱,在B.pypython
文件中又導入了A模塊的某個名稱,可是因爲咱們把from···import都卸載了這兩個文件的開頭,因此就會出現循環導入的問題。函數
咱們先執行哪個.py文件,若是出現了循環導入的問題,程序就會報錯這兩個模塊裏某一個模塊沒有另外一個模塊要找的名稱code
# m1.py print('from m1.py') from m2 import x y = 'm1'
# m2.py print('from m2.py') from m1 import y x = 'm2'
# run.py import m1
ImportError: cannot import name 'y'
ImportError: cannot import name 'x'
ImportError: cannot import name 'y'
咱們能夠使用函數定義階段只識別語法的特性解決循環導入的問題,咱們也能夠從本質上解決循環導入的問題,可是最好的解決方法是不要出現循環導入。class
方案一import
使用函數定義階段只識別語法的特性,在這兩個模塊都定義函數,而且須要把from····import寫在最開始的位置循環
# m1.py print('from m1.py') def func1(): from m2 import x print(x) y = 'm1' # m2.py print('from m2.py') def func1(): from m1 import y print(y) x = 'm2'
方案二語法
就是把咱們兩個模塊須要從對方模塊中找到的名字提早和from····import調整一下語句的前後順序程序
# m1.py print('from m1.py') y = 'm1' from m2 import x # m2.py print('from m2.py') x = 'm2' from m1 import y