Код происхождения (упростить, например):питона динамического из функции импорта модуля строки
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from utils.func_a import func_a as _func_a
from utils.func_b import func_b as _func_b
def func_a():
_func_a()
def func_b():
_func_b()
if __name__ == '__main__':
func_a()
теперь я только называюсь func_a, или, может быть func_b, это зависит от конфигурации.
поэтому я хочу сделать из динамического ... импорт ..., такие как:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def func_a():
_func_a()
def func_b():
_func_b()
if __name__ == '__main__':
keys = ['func_a']
for k in keys:
mod_n = func_n = k
from utils.<mod_n> import <func_n> as _<func_n> # TODO
func_a()
, но я не знаю, как это осуществить?
То, что я думал, что это сделать импорт в func_X():
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def func_a():
from utils.func_a import func_a as _func_a
_func_a()
def func_b():
from utils.func_b import func_b as _func_b
_func_b()
if __name__ == '__main__':
func_a()
, но этот путь будет делать импорт каждый раз, когда вызов функции.
Дополнение:
Я попытался __import__
/importlib
, но не может реализовать это условие
Что касается последнего примера: импорт кэшируются, поэтому модули вы упоминаете, не будут импортированы при каждом вызове функции. [Подробнее читайте здесь.] (Https://docs.python.org/3/reference/import.html) –
Взгляните на [importlib] (https://docs.python.org/3/library/importlib .html # module-importlib). –