gpt4 book ai didi

python - 如何导入模块并更改模块内的变量值并执行它

转载 作者:太空狗 更新时间:2023-10-30 01:20:36 24 4
gpt4 key购买 nike

我有一个模块,我需要在该模块的导入实例中导入和更改特定变量值,然后执行它。

请注意由于遗留原因,我无法对正在导入的模块进行任何更改。

这是我正在尝试做的事情:

假设我要导入的模块 a.py 看起来像

var1 = 1
var2 = 2

if __name__ == '__main__':
print var1+var2

现在我将其导入到调用脚本 b.py 中。我正在尝试导入它,更改变量 var1 的值并使用 runpy 将其作为主程序运行,如下所示。

import runpy
import a

a.var1 = 2
result = runpy._run_module_as_main(a.__name__)

但这打印的结果仅为 3 而不是预期的 4

在不更改 a.py 中的任何内容的情况下,还有其他方法可以实现此目的(除了使用 runpy 之外)吗?只要我不必对导入的模块进行更改,就不会对任何第三方模块开放。

我正在使用 python 2.6

最佳答案

下面是我在评论中提出的具体实现:

#File temp.py
var1 = 1
var2 = 2

if __name__ == '__main__':
print var1+var2

我通过另一个文件 run.py 调用它。关键是要有另一个类似 dict 的类,它不受模块在导入/运行时可能更改的变量的任何更改的影响。该字典包含您要更改其值的变量。

#File: run.py
class UpdatedDict(dict):
def __setitem__(self, key, value):
if key != "var1":
super(UpdatedDict, self).__setitem__(key, value)

u = UpdatedDict({"var1": 10, '__name__': '__main__'})
exec open("temp.py").read() in u #u here is the globals() for the module.

输出

~/Temp$ python run.py
12 #Yay!

注意:这是一个快速而肮脏的实现,只是为了向您展示您可以做到的方式。我建议通过 runpy 并使这段代码看起来更健壮。它现在的样子,是对hackish

的正确定义

关于python - 如何导入模块并更改模块内的变量值并执行它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38210269/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com