Python上下文管理器恢复变量的值?

标签 python with-statement contextmanager

如何编写上下文管理器来将变量恢复为其原始值?例如:

x = 5
with Restorer(x):
   x = 6
   ...
print(x)

输出为: 5

最佳答案

这仅在特定情况下才有可能。通常上下文管理器只获取x的值(实际上是一个引用)。它无法访问变量本身。

对于全局变量,如果调用函数定义在同一个模块中(或者代码只是放在同一个模块中,没有周围的函数),则调用可以写为

with Restorer('x'):

那么恢复器可以是这样的(省略错误检查):

class Restorer:

    def __init__(self, varName):
        self.varName = varName

    def __enter__(self):
        self.oldValue = globals()[self.varName]

    def __exit__(self, exc_type, exc_val, exc_tb):
        globals()[self.varName] = self.oldValue

关于Python上下文管理器恢复变量的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53771621/

相关文章:

python - 从生成器创建列表

database - sql with-recursive 语句如何解释?

Python:为什么我会收到 AttributeError:__enter__

python - 使用 beautiful soup 4 抓取 <p class ="postbody"> 标签内的 URL 并将其保存到文本文件中

python - 在编译时抑制语法错误

python - 用 beautifulsoup 提取 div 标签的内容并创建一个 pandas 数据框

php - 在 php 中使用语句

Python 访问对象属性 a la with-slots lisp

python - 是否可以重试一段特定的代码而不考虑异常?

python - pySerial如何在没有__enter__和__exit__的情况下实现 "with"语句?