在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
答案 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