加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-20 11:56:55 所属栏目:Python 来源:网络整理
导读:我经常需要暂时将变量的值替换为其他东西,做一些依赖于此变量的计算,然后将变量恢复为其原始值.例如: var = 0# Assign temporary value and do computationvar_ori = varvar = 1do_something_with_var() # Function that reads the module level var variab
我经常需要暂时将变量的值替换为其他东西,做一些依赖于此变量的计算,然后将变量恢复为其原始值.例如:

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及其相关函数,因此在使用之前你应该强烈考虑其他选择.非测试环境.像“暂时修改这个东西然后恢复它”这样的操作往往会导致代码混乱,并可能表明你使用了太多的全局状态.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读