获取在contextmanager中使用python中的语句定义的函数列表

时间:2015-01-16 08:12:09

标签: python contextmanager

我在python中有一个问题,如果有人可以请求帮助 这是一个例子,我有一个上下文管理器

from contextlib import contextmanager

@contextmanager
def main_func(name):
    print("<%s>" % name)
    yield
    print("</%s>" % name)
    # Retreive the list of function here : tag_func1 and tag_func2 then run the one I need to run

然后像下面那样使用它

with main_func("h1"):
   def tag_func1():
       print("foo1")

   def tag_func2():
       print("foo2")

我想知道是否可以在这里使用 tag_func1 tag_func1 来修改with语句中定义的函数列表,并在代码中动态运行它们。

我需要在函数 main_func 中执行这些操作 contextmanager

非常感谢你的帮助,

1 个答案:

答案 0 :(得分:1)

class ContextManager():

    def __init__(self):
        self.functions = []

    def func(self, f):
        self.functions.append(f)
        return f

    def __enter__(self):
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        for f in self.functions:
            print(f.__name__)


with ContextManager() as cm:

    @cm.func
    def add(x, y):
        return x + y

    def foo():
        return "foo"

    @cm.func
    def subtract(x, y):
        return x - y


# this code prints "add" and "subtract"

此自定义上下文管理器可以访问使用func方法修饰的with语句内定义的所有函数。