Взгляните на django.conf.__init__.py
, но в основном он использует importlib примерно так:
try:
mod = importlib.import_module(self.SETTINGS_MODULE)
except ImportError, e:
raise ImportError("Could not import settings '%s'
(Is it on sys.path? Does it have syntax errors?):
%s" % (self.SETTINGS_MODULE, e))
# Settings that should be converted into tuples if they're mistakenly entered
# as strings.
tuple_settings = ("INSTALLED_APPS", "TEMPLATE_DIRS")
Редактировать : По просьбе ОП я расширил пример и добавил еще немного ниже.
Теперь, предположим, у вас есть список функций в этом модуле, определенный, например, в списке функций FUNCTIONS TO CALL. Затем вы можете назвать каждого из них так:
ARGUMENTS = '()'
for FUNCTION in FUNCTIONS_TO_CALL:
function_string = FUNCTION + ARGUMENTS
exec(function_string)
Это предполагает, что каждая функция имеет одинаковый набор определенных аргументов. Вы можете использовать оператор if для определения имени функции, указанного пользователем, и предоставления пользовательских аргументов в зависимости от того, что это такое. Вы также можете оценить, прочитав файл python, какими должны быть аргументы.
Вы также можете проверить объект модуля, чтобы (я предполагаю, что это возможно, я не знаю) увидеть, существует ли эта функция перед вызовом exec()
или eval()
. Опять же, я не знаю, можно ли из объекта функции оценить, какие аргументы он принимает. Я подозреваю, что это так, но это отдельный (возможно, уже ответил?) Вопрос.