у меня есть вопрос в питона, если кто-то может пожалуйста помочь Вот пример, у меня есть contextmanager нижеПолучить список функций, определенных в contextmanager с заявлением в питона
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 в d запускать их динамически в коде.
мне нужно выполнить эти действия в функцию main_func, реализующего contextmanager
Большое спасибо вам помочь,
Нет, это не то, что делают менеджеры контекста. Они определяют поведение только при входе и выходе из блока; они не имеют никакого доступа или контроля над тем, что происходит внутри блока. См. [Этот вопрос] (http://stackoverflow.com/questions/21248103/is-it-possible-to-access-the-context-object-code-block-inside-the-exit-m) и [этот ] (http://stackoverflow.com/questions/20767038/is-it-possible-to-access-enclosing-context-manager). – BrenBarn
Контекстные менеджеры даже не создают отдельную область, поэтому все, что вы определяете внутри, также локально определяется вне нее. – poke