2013-07-24 64 views
3

我是全新的Python,任何人都可以請讓我知道我怎麼能做到以下兩個導入python腳本後跟另一行,而我正在每個循環中更改? (以下三條線都處於「for」循環,其計數器是「我」)如何在Python中動態導入?

import Test_include_i 
from Test_include_i import* 
model = Test_include_i.aDefinedFunction 

非常感謝你:)

+10

這是....這樣一個可怕的想法。 –

+1

你爲什麼要這樣? :O – rnbcoder

+0

檢查這個問題的答案。 [在python中導入動態模塊](http://stackoverflow.com/questions/301134/dynamic-module-import-in-python) –

回答

6

這不是一個好主意,但是這是它的實現:

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 blubbimport bla聲明。根據現在的文件勸阻,它的直接用途。
  • importlib.import_module__import__的便利包裝,這是首選。導入的模塊將被記錄在sys.modules中並因此被緩存。如果您在會話期間更改了代碼並想要使用新版本,則必須使用imp.reload明確重新加載它。
  • imp.load_module更接近內部,並且將始終爲您加載模塊的最新版本,即,如果它已經加載load_module相當於模塊上的imp.reload調用。但是要使用這個函數,你必須提供所有4個參數,這些參數基本上是imp.find_module返回的。
+0

非常感謝你,這個概念真的很很有幫助,但不幸的是我沒有這個圖書館! – user2614391

+0

它是在Python 2.7中添加的。對於較早的版本,請改用'__import__'。 – Fredrik

+0

非常感謝! :) – user2614391

1

您需要使用__import__功能,也許importlib,雖然你應該考慮這是你真正想做什麼。也許可以解釋你想要達到的目標,並且可能會有更好的方法。

+0

我認爲importlib庫應該工作,但不幸的是,我工作的Python是2.6.6,並沒有這個庫! 我正在讀取Test_include文件中正在更改和重命名的一些信息(通過在名稱末尾添加i),因此在每個步驟中我都必須導入最新編輯的文件,而不是前一個。 我還可以補充一點,如果以前的Test_include文件不存在,這對我來說並不重要! :) – user2614391

+0

如果您使用的是Python 2.6.6,那麼'imp'模塊將是您最好的選擇(請參閱下面的答案)。我不會使用'__import__',因爲這是一個低級的實現,它不打算在「生產」代碼中使用。 'imp'模塊有一個原因:) – Ludo

+0

這是倒退 - 'imp'是提供對內部進行訪問的低級實現接口,並且通常需要多個調用才能正確執行(查找,然後加載)。使用文檔'__import__' API非常好。 – Fredrik