我想導入名稱未知的模塊的成員。取而代之的動態導入Python模塊
import foo
我使用:
__import__("foo")
我如何才能實現對from foo import bar
箱子而不是訴諸的「EVAL」類似的事情?
更新:看來fromlist
做到了。有沒有類似from foo import *
的方法? fromlist=['*']
沒有做到這一點。
我想導入名稱未知的模塊的成員。取而代之的動態導入Python模塊
import foo
我使用:
__import__("foo")
我如何才能實現對from foo import bar
箱子而不是訴諸的「EVAL」類似的事情?
更新:看來fromlist
做到了。有沒有類似from foo import *
的方法? fromlist=['*']
沒有做到這一點。
爲了模擬from foo import *
可以使用dir
得到導入模塊的屬性:
foo = __import__('foo')
for attr in dir(foo):
if not attr.startswith('_'):
globals()[attr] = getattr(foo, attr)
使用from foo import *
在一般皺着眉頭,並模仿它更是這樣,我會想象。
__import__("foo", fromlist=["bar"])
瞭解更多信息help(__import__)
謝謝。有沒有辦法模仿「從富進口*」? – ustun 2012-03-20 09:21:26
您可以用動態的__import__
幫助進口。有fromlist
的關鍵參數__import__
致電from foo import bar
。
謝謝。有沒有辦法模仿「從富進口*」? – ustun 2012-03-20 09:18:37
有時要導入的許多配置文件中的一個,每一個爲相同的命名變量有不同的價值觀,http://stardict.sourceforge.net/Dictionaries.php下載等
你不能做到這一點:
def mother_function(module, *args, **kwargs):
from module import variable
return variable
def call_home_to_mamma():
import module_42
return mother_function(module_42)
關於爲什麼這不起作用的解釋高於我的薪酬等級,並涉及到關閉和命名空間。我發現工作是要求以「MODULE_NAME」作爲一個字符串參數母函數,然後dyamically導入特定變量的時候我真的需要它:
def mother_function(module_name, *args, **kwargs):
exec('from %s import %s' % (module_name, variable))
variable = eval(variable)
return variable
def call_home_to_mamma():
import module_42
return mother_function(module_42.__name__)
賓果....你有任何變量的dyamic進口您需要從運行時確定的導入模塊導入。
+1我使用__builtins__而不是globals(),以便我可以使用另一個模塊的代碼。 – 2012-10-16 00:15:01