python匯入迴圈問題

2021-10-08 11:48:49 字數 3039 閱讀 6728

# 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 我們可以使用函式定義階段只識別語法的特性解決迴圈匯入的問題,我們也可以從本質上解決迴圈...