można zrobić następujące trick:
>>> import importlib
>>> globals().update(importlib.import_module('math').__dict__)
>>> sin
<built-in function sin>
ostrzegamy sprawia, że wszystkie nazwy w module dostępnych lokalnie, więc jest to nieco inna niż *
, ponieważ nie rozpoczyna się od __all__
, więc np. Zastąpi on także: __name__
, __package__
, __loader__
, .
Aktualizacja:
Oto dokładniejsze i bezpieczniejsze wersja jak @mata wskazał w comments:
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('_')
})
Szczególne podziękowania Nam G VU za pomoc w stworzeniu odpowiedź pełniejsze.
Dlaczego próbujesz to zrobić? '' '-imports są generalnie mile widziane, zajmują przestrzeń nazw i możesz w końcu importować rzeczy, których nie masz zamiaru (np. moduł jest aktualizowany, otrzymuje nową funkcję, która przesłania wcześniejszy import). Czy masz konkretny przypadek, aby robić to dynamicznie? – mata
Wiem, że używanie 'importu'' brzmi niebezpiecznie; choć działa to w przypadku prostego użycia. Moim konkretnym przypadkiem jest to, że próbuję użyć 'proboscis' do uruchomienia' testu Pythona', który pozwala mi wybrać, który kombinezon testowy ma zostać uruchomiony - wybrany kolor testowy jest zdefiniowany przez tablicę testowych nazw plików. –