我有一对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'
这样的妄想可能吗?
更新: 仅为了清晰起见,这里是仅使用上下文管理器的实现:
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
如果不使用with关键字调用它们,会返回一个生成器。是否有办法在纯函数调用和巧克力上下文管理器中获取模式翻转的行为?
MODE
的值有何意义? - Evpokdef set_mode(mode):
和之后的MODE = mode
怎么样?这样你只需要写一次代码... - glglgl