在Python 3中保存/恢复变量的通用方法

时间:2017-12-14 15:31:23

标签: python python-3.6

在Python 3中是否有一种简单的方法可以在范围内保存/恢复变量?

例如:

x=4
with x=5:
   ... do something with x that's temporarily 5

with os.environ["FOO"] = "BAR":
   ... do something here

对于python解释器来说,实现这一点似乎非常容易(分配的左侧保存,右侧在__enter__上执行,在__exit__上恢复)

或者至少是某些图书馆或其他什么。

使用临时变量执行此操作需要try / finally块,并且本质上不安全且容易出现运行时错误。这似乎是" unpythonic"相比之下。

try:
    save = os.environ["FOO"]
    os.environ["FOO"] = "BAR"

   ... do something here

finally:
    os.environ["FOO"] = save

1 个答案:

答案 0 :(得分:0)

我创建了一个执行此操作的库。不确定是否有更简单的方法来做到这一点。看起来我的图书馆可能是" patch.object"的克隆。和" patch.dict" .... 不确定。关于那些的文档对我来说似乎含糊不清。

https://gist.github.com/earonesty/ac0617a5672ae1a41be1eaf316dd63e4

例如:

import os
from varlib import vartemp, envtemp

x = 3
y = 4
print ("Before: x is", x, "y is", y)

with vartemp({'x':93,'y':94}):
    print ("In temp: x is", x, "y is", y)

print ("After: x is", x, "y is", y)

with envtemp({'foo':'bar'}):
    print(os.getenv('foo'))

print(os.getenv('foo'))

输出在这里:

Before: x is 3 y is 4
In temp: x is 93 y is 94
After: x is 3 y is 4
bar
None