2010-07-15 27 views
17

在Ruby中,而不是重複「規定」(Python中的「導入」)這個詞很多次,我做如何在Python中執行多個導入?

%w{lib1 lib2 lib3 lib4 lib5}.each { |x| require x } 

所以它遍歷集合「庫」和「規定」(進口)他們每個人。現在我正在編寫一個Python腳本,我想要做這樣的事情。有沒有辦法,或者我需要爲所有人編寫「導入」。

直接的「traduction」就像下面的代碼一樣。無論如何,由於Python不會導入以字符串命名的庫,它不起作用。

requirements = [lib1, lib2, lib3, lib4, lib5] 
for lib in requirements: 
    import lib 

在此先感謝

+1

的Python實際上確實有一個內置的函數['__import__'(http://docs.python.org/library/functions.html#__import__),你​​可以用它來進口一個以字符串命名的模塊。但它意味着從執行'import'語句而不是來自用戶代碼。在這種情況下,它肯定不是合適的解決方案。 – 2010-07-15 22:38:09

+0

哦!真的非常感謝所有的答案。他們都很好。 – Eduardo 2010-07-15 22:59:40

回答

26

對於已知模塊,只需用逗號分隔:

import lib1, lib2, lib3, lib4, lib5 

如果你真的需要編程方式導入基於動態變量,您紅寶石的直譯是:

modnames = "lib1 lib2 lib3 lib4 lib5".split() 
for lib in modnames: 
    globals()[lib] = __import__(lib) 

雖然在你的例子中沒有必要這樣做。

12

試試這個:

import lib1, lib2, lib3, lib4, lib5 

您也可以改變他們以這種方式下進口的名字,像這樣:

import lib1 as l1, lib2 as l2, lib3, lib4 as l4, lib5 
4

您可以使用__import__函數從包含模塊名稱的字符串導入。

requirements = [lib1, lib2, lib3, lib4, lib5] 
for lib in requirements: 
    x = __import__(lib) 
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)> 
相關問題