Python 用修饰函数填充字典

Python 用修饰函数填充字典,python,python-3.x,Python,Python 3.x,我正在创建一个基本上运行一系列测试的应用程序,每个测试都是一个单独的函数。我有一个测试/函数列表,就像这样的字典 test = { "test 1": f1, "test 2": f2, "test 3": f3 } 我可以执行如下功能: for testn, _ in test.items(): test[testn]() tests = {} @task("test 1") def f1(): ... @task("test 2") def f1

我正在创建一个基本上运行一系列测试的应用程序,每个测试都是一个单独的函数。我有一个测试/函数列表,就像这样的字典

test = {
    "test 1": f1,
    "test 2": f2,
    "test 3": f3
}
我可以执行如下功能:

for testn, _ in test.items():
    test[testn]()
tests = {}

@task("test 1")
def f1():
   ...

@task("test 2")
def f1():
   ...

def run():
    for testn, _ in tests:
        tests[test]()
但我想这样做:

for testn, _ in test.items():
    test[testn]()
tests = {}

@task("test 1")
def f1():
   ...

@task("test 2")
def f1():
   ...

def run():
    for testn, _ in tests:
        tests[test]()

我想知道这怎么可能。任何帮助都将不胜感激

您可以创建一个简单的装饰器来填充函数注册表
测试

tests = {}
def task(name):
   def wrapper(funct):
      tests[name] = funct
      return funct
   return wrapper

@task("test 1")
def f1():
  ...

@task("test 2")
def f2():
  ...

def run():
  for testn, _ in tests.items():
    tests[test]()
现在,在调用
run
之前,当迭代字典时,可以观察到结构是正确的:

print({a:b.__name__ for a, b in tests.items()})
输出:

{'test 2': 'f2', 'test 1': 'f1'}
{'test 2': 'f2', 'test 1': 'f1'}
但是,请注意,
测试
确实包含所有函数实例:

{'test 2': <function f2 at 0x10de0e5f0>, 'test 1': <function f1 at 0x10de0e578>}
输出:

{'test 2': 'f2', 'test 1': 'f1'}
{'test 2': 'f2', 'test 1': 'f1'}

出于好奇,如果函数是在类中定义的,这会是什么样子?非常感谢!我很感激@user1960118很高兴为您提供帮助!