問題記錄:import和from...import在實際使用中注意的事項

在使用python中我們會使用importfrom...import...對模塊進行導入,但在實際中我們可能會遇到如下問題:
尤其在多個文件中引入同一個模塊並對該模塊的參數進行操作時,會存在如下問題

  1. import模塊導入路徑問題
  2. 重新導入模塊問題
  3. 一個模塊被多個文件使用並對模塊的參數進行修改時,會存在部分操作無效的情況

具體說明如下:

1.路徑問題

import等類似語句導入模塊的默認路徑是按照sys.path中的文件路徑執行的。sys.path打印結果爲一個元組,這個元組中文件路徑順序即爲import某一個文件的文件查找順序–由前到後的查找。

# sys.path打印結果:其中''指當前路徑。
['', 
'C:\\Users\\luo\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip',
'C:\\Users\\luo\\AppData\\Local\\Programs\\Python\\Python36\\DLLs',
'C:\\Users\\luo\\AppData\\Local\\Programs\\Python\\Python36\\lib', 
'C:\\Users\\luo\\AppData\\Local\\Programs\\Python\\Python36',
'C:\\Users\\luo\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages']

當已經安裝某個模塊無法導入時可以使用sys.path.append('/home/itcast/xxx')方法添加文件查找路徑。
當某個文件導入不是自己安裝的模塊時,可以使用sys.path.insert(0, '/home/itcast/xxx'), 可以確保先搜索這個路徑插入最頭部,保證優先查找

2. 重新導入模塊問題

模塊被導入後,import module不能重新導入模塊,重新導入需用reload。

即分爲兩個部分:
1.import導入模塊只會導入一次,因此即使模塊進行了修改,import也不會重新導入。如果要重新導入,需要使用reload模塊。執行操作如下:

from imp import reload
reload(模塊名)	# 模塊被重新導入

2.一個模塊在一個文件中如果被多次導入時,python解釋器只會按照第一個次導入該模塊的位置執行,之後導入的語句不執行。

3. 多模塊導入問題

當使用from...import...導入某一個函數或者變量時,其實已經對該部分進行了一個複製。當後續對該部分進行修改時,並不影響原本文件中的參數。所以就會有多個文件對導入模塊的參數進行修改時,最終執行的結果並不如預想到的。
解決這個辦法是使用import xxx導入整個文件,在執行中使用xxx.a()的方式進行操作,這樣操作的實際數據就是模塊下的參數。
PS:這在一個模塊被多個文件導入時,需要尤其的注意,避免踩坑!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章