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

2024-03-08

我经常需要暂时用其他东西交换变量的值,进行一些依赖于该变量的计算,然后将变量恢复为其原始值。例如:

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 标准库是否包含任何此类上下文管理器?

Edit

我知道这种事情通常可以通过其他比临时更改变量更好的方法来处理。然而,我并不要求明显的解决方法。

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


不,因为上下文管理器不能像这样在调用者的作用域中分配变量。 (任何认为你可以做到这一点的人locals or inspect,尝试使用您在函数内部提出的上下文管理器。这不会起作用。)

There are用于对非局部变量(例如模块全局变量、其他对象属性和字典)执行此操作的实用程序...但它们是unittest.mock.patch https://docs.python.org/3/library/unittest.mock.html#the-patchers及其相关功能,因此在非测试环境中使用它们之前,您应该强烈考虑其他替代方案。像“暂时修改这个东西然后恢复它”这样的操作往往会导致代码混乱,并且可能表明您使用了太多的全局状态。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

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

随机推荐