# m1.py
# print('正在匯入m1')
## x = 'm1'
# from m2 import y
1、建立m2的命名空間
2、執行m2.py,將執行產生的名字丟到m2.py
3、在當前執行檔案中拿到m2.y
# m2.py
# print('正在匯入m2')
# y = 'm2'
## from m1 import x
1、建立m1的命名空間
2、執行m1.py,將執行產生的名字丟到m1.py
3、在當前執行檔案中拿到m1.x
# 迴圈匯入.py
import m1
1、建立m1的命名空間
2,執行m1.py,將產生的名字丟到m1.py
3、在當前執行檔案中拿到m1
執行迴圈匯入.py,則報錯importerror:cannot import name 『x』 from
執行m1.py,則報錯importerror: cannotimport name 『y』
執行m2.py,則報錯
importerror: cannot import name 『x』
我麼可以使用函式定義階段只識別語法的特性解決迴圈匯入的問題,我們也可以從本質上解決迴圈匯入的問題,但是最好的解決方法是不要出現迴圈匯入。
方案一:迴圈匯入的名字提前放,匯入語句往後放
# m1.py
print
('正在匯入m1'
)x =
'm1'
from m2 import y
# m2.py
print
('正在匯入m2'
)y =
'm2'
from m1 import x
方案二:匯入語句放進函式
# m1.py
# print('正在匯入m1')
## def f1():
# from m2 import y
# print(x,y)
# ## x='m1'
# m2.py
## print('正在匯入m2')
## def f2():
# from m1 import x
# print(x,y)
## y='m2'
內建方法:name
1、當檔案是執行檔案時,print(name)時,返回的結果是__main__
2、當檔案被當作模組檔案匯入的時候,print(name)列印的結果是模組名字,沒有字尾名
快捷寫法:main加tab鍵即可
if __name__ ==
'__main__'
:
__name__的用處:當開發乙個程式時,當我們要執行編寫的函式時,會在檔案底部呼叫函式,看下函式執**況,但是當我們程式上線,使用者呼叫這些函式時,為了不讓測試時的函式不會呼叫就用__name__來做判斷。
從記憶體中找:在執行檔案匯入time模組以及匯入模組,然後time.sleep(10),在這過程中把匯入模組刪除,看會不會執行後面的結果
# import mmm
# mmm.f1()
# import time
# time.sleep(5)
## print('='*50)
# import mmm
# mmm.f1
第一次執行時可以執行結果
第二次mmm.py就從記憶體中釋放出去了,結果報錯。
在內建中找:
# import sys
# print(sys.modules)
# python自帶的模組
注意:py檔名不應該與模組名(內建的,第三方)衝突
重要:一定要分清楚誰是執行檔案誰是被匯入檔案
sys,path是乙個大列表,裡面放了乙個檔案路徑,第乙個路徑永遠是執行檔案所在的資料夾
sys.path是以當前被執行檔案路徑為參照物
絕對匯入: 以執行檔案的sys.path為起始點開始匯入,稱之為絕對匯入
優點: 執行檔案與被匯入的模組中都可以使用
缺點: 所有匯入都是以sys.path為起始點,匯入麻煩
(注意:執行檔案只能用絕對匯入)
相對匯入: 參照當前所在檔案的資料夾為起始開始查詢,稱之為相對匯入
符號: .代表當前所在檔案的檔案,加..代表上一級資料夾,加...代表上一級的上一級資料夾
優點: 匯入更加簡單
缺點: 只能在匯入包中的模組時才能使用,不能在執行檔案中用
動態呼叫當前資料夾路徑:
import sys
import os
import os
print
(__file__)
結果:當前檔案路徑
/users/yueying/pycharmprojects/untitled/day17/atm/conf/setting.py
變數名 = os.path.dirname(file)
import os
base_dir=os.path.dirname(os.path.dirname(__file__)
)print
(base_dir)
結果:/users/yueying/pycharmprojects/untitled/day17/atm
import sys
)
Python 匯入迴圈問題
一 匯入迴圈 在大型的python工程中,由於架構設計不當,可能會出現模組間相互引用的情況。這時候需要通過一些方法來解決這個問題.1 重新設計架構,解除相互引用的關係。2 把import語句放置在模組的最後 3 把import語句放置在函式中 1 重新設計架構,解除相互引用 後續補充 2 把impo...
迴圈匯入問題
目錄python從入門到放棄完整教程目錄 m1.py print from m1.py from m2 import x y m1 建立m2的命名空間 執行m2.py,將執行產生的名字丟到m2.py 在當前執行檔案中拿到m2.x m2.py print from m2.py from m1 impo...
迴圈匯入問題
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 我們可以使用函式定義階段只識別語法的特性解決迴圈匯入的問題,我們也可以從本質上解決迴圈...