用于临时变量赋值的Python上下文管理器

我经常需要暂时将变量的值替换为其他东西,做一些依赖于此变量的计算,然后将变量恢复为其原始值.例如:

var = 0
# Assign temporary value and do computation
var_ori = var
var = 1
do_something_with_var()  # Function that reads the module level var variable
# Reassign original value
var = var_ori

这似乎是使用上下文管理器(with语句)的明显机会. Python标准库是否包含任何此类上下文管理器?

编辑

我知道这种事情通常由其他更好的方法处理,而不是临时更改变量.然而,我并没有要求明显的解决方法.

在我的实际工作案例中,我无法改变do_something_with_var函数.实际上这甚至不是一个函数,而是一串代码,它在全局命名空间的上下文中作为一些元编程的一部分进行评估.我给出的例子是我能想到的最简单的例子,它保留了我对临时变量的问题.我没有要求获得我的示例代码的解决方法(正确版本),而是要在我的书面问题上得到答案.

最佳答案 不,因为上下文管理器不能像调用那样在调用者的范围内分配变量. (任何认为你可以与当地人一起做或检查的人,尝试使用你在函数内部提出的上下文管理器.它将不起作用.)

有一些实用程序可以使用不是局部变量的东西,例如模块全局变量,其他对象属性和dicts ……但是它们是unittest.mock.patch及其相关函数,因此在使用之前你应该强烈考虑其他选择.非测试环境.像“暂时修改这个东西然后恢复它”这样的操作往往会导致代码混乱,并可能表明你使用了太多的全局状态.

点赞