# m1.py print('from m1.py') from m2 import x y = 'm1'
1.建立m2的名稱空間
2.執行m2.py,將執行產生的名字丟到m2.py
3.在當前執行文件中拿到m2.xpython
# m2.py print('from m2.py') from m1 import y x = 'm2'
1.建立m1的名稱空間
2.執行m1.py,將執行產生的名字丟到m1.py
3.在當前執行文件中拿到m1.y函數
# run.py import m1
1.建立m1的名稱空間
2.執行m1.py,將執行產生的名字丟到m1.py
在當前執行文件中拿到m1
* 若是運行run.py,則會報錯ImportError: cannot import name 'y'
* 若是運行m1.py,則會報錯ImportError: cannot import name 'x'
* 若是運行m2.py,則會報錯ImportError: cannot import name 'y'code
咱們可使用函數定義階段只識別語法的特性解決循環導入的問題,咱們也能夠從本質上解決循環導入的問題,可是最好的解決方法是不要出現循環導入。class
放在函數體中導入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'
把導入位置放在最下面(就是全加載再導入,我的推薦方案一,這方法可讀性不強)循環
# m1.py print('from m1.py') y = 'm1' from m2 import x
# m2.py print('from m2.py') x = 'm2' from m1 import y