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很高兴为您提供帮助!