我是全新的Python,任何人都可以請讓我知道我怎麼能做到以下兩個導入python腳本後跟另一行,而我正在每個循環中更改? (以下三條線都處於「for」循環,其計數器是「我」)如何在Python中動態導入?
import Test_include_i
from Test_include_i import*
model = Test_include_i.aDefinedFunction
非常感謝你:)
我是全新的Python,任何人都可以請讓我知道我怎麼能做到以下兩個導入python腳本後跟另一行,而我正在每個循環中更改? (以下三條線都處於「for」循環,其計數器是「我」)如何在Python中動態導入?
import Test_include_i
from Test_include_i import*
model = Test_include_i.aDefinedFunction
非常感謝你:)
這不是一個好主意,但是這是它的實現:
from importlib import import_module # Awesome line! :)
for i in range(1000):
test_include = import_module("Test_include_%s" % i)
model = test_include.aDefinedFunction
關於所提供的方法之間的區別:
__import__
是低級別的接口,處理from bla import blubb
和import bla
聲明。根據現在的文件勸阻,它的直接用途。importlib.import_module
是__import__
的便利包裝,這是首選。導入的模塊將被記錄在sys.modules
中並因此被緩存。如果您在會話期間更改了代碼並想要使用新版本,則必須使用imp.reload
明確重新加載它。imp.load_module
更接近內部,並且將始終爲您加載模塊的最新版本,即,如果它已經加載load_module
相當於模塊上的imp.reload
調用。但是要使用這個函數,你必須提供所有4個參數,這些參數基本上是imp.find_module
返回的。非常感謝你,這個概念真的很很有幫助,但不幸的是我沒有這個圖書館! – user2614391
它是在Python 2.7中添加的。對於較早的版本,請改用'__import__'。 – Fredrik
非常感謝! :) – user2614391
您需要使用__import__
功能,也許importlib,雖然你應該考慮這是你真正想做什麼。也許可以解釋你想要達到的目標,並且可能會有更好的方法。
我認爲importlib庫應該工作,但不幸的是,我工作的Python是2.6.6,並沒有這個庫! 我正在讀取Test_include文件中正在更改和重命名的一些信息(通過在名稱末尾添加i),因此在每個步驟中我都必須導入最新編輯的文件,而不是前一個。 我還可以補充一點,如果以前的Test_include文件不存在,這對我來說並不重要! :) – user2614391
如果您使用的是Python 2.6.6,那麼'imp'模塊將是您最好的選擇(請參閱下面的答案)。我不會使用'__import__',因爲這是一個低級的實現,它不打算在「生產」代碼中使用。 'imp'模塊有一個原因:) – Ludo
這是倒退 - 'imp'是提供對內部進行訪問的低級實現接口,並且通常需要多個調用才能正確執行(查找,然後加載)。使用文檔'__import__' API非常好。 – Fredrik
您可以使用imp.load_module()
,它接受字符串作爲模塊名稱。見http://docs.python.org/2/library/imp.html#imp.load_module
非常感謝你,這真是太棒了! :) 它與「imp.reload(Test_include)」一起工作,我不必在每個循環中更改Test_include文件的名稱! – user2614391
這是....這樣一個可怕的想法。 –
你爲什麼要這樣? :O – rnbcoder
檢查這個問題的答案。 [在python中導入動態模塊](http://stackoverflow.com/questions/301134/dynamic-module-import-in-python) –