gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 13:23:10 24 4
gpt4 key购买 nike

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

>>> 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'

这样的嵌合体可能吗?

更新:为了清楚起见,这里是仅上下文管理器的实现:

from contextlib import contextmanager

@contextmanager
def mode_sudo():
global MODE
old_mode = MODE
MODE = 'sudo'
yield
MODE = old_mode

@contextmanager
def mode_user():
global MODE
old_mode = MODE
MODE = 'user'
yield
MODE = old_mode

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

最佳答案

这样做:

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.

关于python - 是否可以制作一个上下文敏感的 python 上下文管理器来保存、修改和恢复状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6988541/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com