我有一对
python函数,目前在两个值之间翻转一个全局变量.我想把它们变成上下文管理器,所以我可以像块一样使用它们,在块中设置变量,但之后恢复它.这是所需的行为:
>>> 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关键字调用这些w / o会返回一个生成器.有没有办法通过普通香草函数调用和巧克力上下文管理器获得模式翻转行为?
解决方法
像这样做:
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.