是否有可能创建一个上下文敏感的python上下文管理器来保存,修改
发布时间:2020-12-20 11:19:56 所属栏目:Python 来源:网络整理
导读:我有一对 python函数,目前在两个值之间翻转一个全局变量.我想把它们变成上下文管理器,所以我可以像块一样使用它们,在块中设置变量,但之后恢复它.这是所需的行为: MODE'user' mode_sudo() # Sets MODE to 'sudo'... MODE'sudo' mode_user() # Sets MODE to '
我有一对
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. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |