Ответ 1
Вы можете сделать следующий трюк:
>>> import importlib
>>> globals().update(importlib.import_module('math').__dict__)
>>> sin
<built-in function sin>
Предупредить, что все имена в модуле доступны локально, поэтому он немного отличается от *
, потому что он не начинается с __all__
, так, например, для. он также переопределит __name__
, __package__
, __loader__
, __doc__
.
Update:
Вот более точная и безопасная версия, которую @mata указала в комментариях:
module = importlib.import_module('math')
globals().update(
{n: getattr(module, n) for n in module.__all__} if hasattr(module, '__all__')
else
{k: v for (k, v) in module.__dict__.items() if not k.startswith('_')
})
Особая благодарность Nam G VU за помощь, чтобы сделать ответ более полным.