保留在python中模块导入期间创建的变量

时间:2018-09-19 15:24:15

标签: python-3.x python-decorators

我正在尝试用功能以及包含在另一个格式的文件中的功能名称填充字典:

{'fn_a':函数fn_a位于0x000002239BDCB510,'fn_b':函数fn_b位于0x000002239BDCB268}。

我目前正在尝试使用装饰器执行此操作,因此,当导入包含函数(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 :(得分:0)

我能够使用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)