2013-07-24 46 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