Сохранение переменной, созданной при импорте модуля в python - PullRequest
0 голосов
/ 19 сентября 2018

Я пытаюсь заполнить словарь функциями вместе с именем функции, содержащейся в другом файле вида:

{'fn_a': function fn_a at 0x000002239BDCB510, 'fn_b': function fn_b at0x000002239BDCB268}.

В настоящее время я пытаюсь сделать это с помощью декоратора, поэтому при импорте файла, содержащего функции (definitions.py), словарь заполняется следующим образом.Проблема заключается в том, что словарь очищается после завершения импорта.

definitions.py:

from main import formatter

@formatter
def fn_a(arg):
    return arg

@formatter
def fn_b(arg):
    return arg

main.py:

available_functions = {}

def formatter(func):
    # work out function name and write to func_name
    func_name=str(func).split()[1]
    available_functions[func_name] = func
    return func

import definitions

Как сохранитьсловарь, заполненный значениями после завершения импорта модуля?

1 Ответ

0 голосов
/ 21 сентября 2018

Мне удалось решить проблему с помощью модуля FunctionType, чтобы вернуть доступные функции из импортированного модуля.Это не решает проблему в указанных выше условиях, но работает.

from types import FunctionType

available_functions = {}

def formatter(func):
    # work out function name and write to func_name
    #global available_functions
    func_name=str(func).split()[1]
    available_functions[func_name] = func
    return func

import definitions

funcs=[getattr(definitions, a) for a in dir(definitions)
  if isinstance(getattr(definitions, a), FunctionType)]

for i in funcs:
    formatter(i)
...