在Ruby中,我没有多次重复“require”(Python中的“import”),而是
%w{lib1 lib2 lib3 lib4 lib5}.each { |x| require x }
因此,它遍历“libs”和“require”(导入)它们中的每一个。现在我正在编写一个Python脚本,我想做类似的事情。有没有办法,或者我需要为所有人写“导入”。
直接的“traduction”将类似于以下代码。无论如何,因为Python不会导入名为字符串的库,所以它不起作用。
requirements = [lib1, lib2, lib3, lib4, lib5]
for lib in requirements:
import lib
提前致谢
答案 0 :(得分:41)
对于已知模块,只需用逗号分隔:
import lib1, lib2, lib3, lib4, lib5
如果你真的需要以编程方式导入基于动态变量,你的ruby的字面翻译将是:
modnames = "lib1 lib2 lib3 lib4 lib5".split()
for lib in modnames:
globals()[lib] = __import__(lib)
虽然在你的例子中没有必要这样做。
答案 1 :(得分:16)
试试这个:
import lib1, lib2, lib3, lib4, lib5
您也可以通过这种方式更改导入的名称,如下所示:
import lib1 as l1, lib2 as l2, lib3, lib4 as l4, lib5
答案 2 :(得分:8)
import lib1, lib2, lib3, lib4, lib5
答案 3 :(得分:4)
您可以使用__import__
函数从包含模块名称的字符串导入。
requirements = [lib1, lib2, lib3, lib4, lib5]
for lib in requirements:
x = __import__(lib)
答案 4 :(得分:1)
如果您有表示模块的字符串列表,则可以使用__import__
,但如果您按照文档中的提示并直接使用importlib.import_module
,则可能更清晰:
import importlib
requirements = [lib1, lib2, lib3, lib4, lib5]
imported_libs = {lib: importlib.import_module(lib) for lib in requirements}
您没有将导入的库作为变量可用,但您可以通过imported_libs
字典访问它们:
>>> requirements = ['sys', 'itertools', 'collections', 'pickle']
>>> imported_libs = {lib: importlib.import_module(lib) for lib in requirements}
>>> imported_libs
{'collections': <module 'collections' from 'lib\\collections\\__init__.py'>,
'itertools': <module 'itertools' (built-in)>,
'pickle': <module 'pickle' from 'lib\\pickle.py'>,
'sys': <module 'sys' (built-in)>}
>>> imported_libs['sys'].hexversion
50660592
您还可以更新globals
然后使用它们,就像它们“正常”导入一样:
>>> globals().update(imported_libs)
>>> sys
<module 'sys' (built-in)>
答案 5 :(得分:0)
如果要多行显示:
from englishapps.multiple.mainfile import (
create_multiple_,
get_data_for_multiple
)