我有一对
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.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。