是否可以制作一个上下文敏感的python上下文管理器来保存、修改和恢复状态?

2024-04-25 00:39:17 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一对python函数,它们当前在两个值之间翻转全局变量。我想把它们转换成上下文管理器,这样我就可以用它们作为with块,在块内设置变量,但在之后恢复它。以下是期望的行为:

>>> MODE
'user'
>>> mode_sudo()  # Sets MODE to 'sudo'...
>>> MODE
'sudo'
>>> mode_user()  # Sets MODE to 'user'...
>>> MODE
'user'
>>> with mode_sudo():
...    print MODE
'sudo'
>>> MODE
'user'

这样的幻想可能吗?在

更新:为了清晰起见,以下是仅限上下文管理器的实现:

^{pr2}$

用关键字调用这些w/o返回一个生成器。有没有一种方法可以通过普通的函数调用和巧克力上下文管理器来获得模式翻转行为?在


Tags: to方法函数管理器modewithsetssudo
2条回答

简单方法:

from contextlib import contextmanager
@contextmanager
def mode_user():
    global MODE
    old_mode = MODE
    MODE = "user"
    yield
    MODE = old_mode

mode_sudo()的标识。有关详细信息,请参见the doc。它实际上是整个“定义实现__enter____exit__的类”的快捷方式。在

这样做:

class mod_user:

    def __init__(self):
        global MODE
        self._old_mode = MODE
        MODE = "user"

    def __enter__(self):
        pass

    def __exit__(self, *args, **kws):
        global MODE
        MODE = self._old_mode

MODE = "sudo"

with mod_user():
    print MODE  # print : user.

print MODE  # print: sudo.

mod_user()
print MODE   # print: user.

相关问题 更多 >