我是全新的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) –