Sie können die folgenden Trick:
>>> import importlib
>>> globals().update(importlib.import_module('math').__dict__)
>>> sin
<built-in function sin>
gewarnt werden, dass alle Namen in dem Modul vor Ort zur Verfügung stellt, so dass es etwas anders als *
, weil es nicht mit __all__
so für zB beginnt Es überschreibt auch __name__
, __package__
, __loader__
, __doc__
.
Update:
Hier ist eine genauere und sicherere Version als @mata in comments wies darauf hin:
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('_')
})
Besonderer Dank geht an Nam G VU für die Unterstützung an die Antwort mehr komplett.
Warum versuchen Sie dies zu tun? '*' - Importe sind im Allgemeinen verpönt, sie überfluten den Namespace und Sie können Dinge importieren, die Sie nicht beabsichtigt haben (z. B. ein Modul wird aktualisiert, erhält eine neue Funktion, die einen früheren Import außer Kraft setzt). Haben Sie einen konkreten Anwendungsfall, um dies dynamisch zu tun? – mata
Ich weiß mit 'Import *' Sound gefährlich; obwohl es für den einfachen Anwendungsfall funktioniert. Mein konkreter Anwendungsfall ist, dass ich versuche, 'Proboscis' zu verwenden, um' Python-Test' auszuführen, die es mir ermöglichen, den zu testenden Testanzug auszuwählen - der gewählte Testanzug wird durch eine Reihe von Testdateinamen definiert. –