【发布时间】:2018-03-02 20:07:16
【问题描述】:
假设我有两个模块:
a.py
value = 3
def x()
return value
b.py
from a import x
value = 4
我的目标是在b中使用a.x的功能,但是改变函数返回的值。具体来说,即使我运行b.x(),value 也会以a 作为全局名称的来源进行查找。我基本上是在尝试在b.x 中创建与a.x 相同的函数对象的副本,但使用b 来获取其全局变量。有没有一种相当简单的方法可以做到这一点?
这是一个例子:
import a, b
print(a.x(), b.x())
结果当前是3 3,但我希望它是3 4。
我想出了两种有效的复杂方法,但我对任何一种都不满意:
- 使用复制粘贴在模块
b中重新定义x。实际功能比显示的要复杂得多,所以这不适合我。 -
定义一个可以传入x的参数,只使用模块的值:
def x(value): return value这给用户增加了我想避免的负担,并没有真正解决问题。
有没有办法修改函数以某种方式获取其全局变量的位置?
【问题讨论】:
-
你想要 C++ 中的返回引用之类的东西吗?
-
@liliscent 不确定那是什么,但我添加了一个我想要的示例。
-
如果您只想修改另一个模块中的变量,只需使用
a.value访问即可。我不知道你为什么提到那个函数x()。 -
因为我想在
b中复制引用b的全局变量而不是a的函数对象。 -
@liliscent。也许现在更清楚了?