python导入共享共同的价值?

时间:2015-02-11 13:53:42

标签: python python-3.x anaconda spyder

可能听起来像是初学者,但是这里有。

我正在导入一个Typedef脚本,其中包含在整个程序中使用和调用的变量。我这样做只需在包/工作区内的所有脚本上调用'import Typedef'

现在我通过调用:

在其中一个脚本中更改Typedef中的变量
Typedef.myVariable = newVariable

如果其他脚本引用此变量,是否会反映此更改?

如果没有,我该怎么做才能纠正这个问题?

如果有帮助,我使用的是Python 3.4,使用Anaconda的Spyder进行编码。

2 个答案:

答案 0 :(得分:3)

是的,正如评论中所述。

你只需要处理像

这样的结构

from TypeDef import myvariable - 在这种情况下,myvariable是一个新名称 指向导入时变量的值,并且不会“看到”TypeDef.myvariable的新值的更新。

为本地命名空间中的对象指定名称(或“全局”命名空间 - 在Python中,全局变量实际上是“模块本地”),该名称指向该特定对象。

请谨慎使用,并确保在项目中记录此类用法。这是Python中最常用的,而不是静态语言中所需的“Singletons”。

此外,该技术可用于更改其他模块中的实际功能或类 - 即所谓的“猴子修补”。 (一般来说,对于生产代码来说不是很好 - 另一方面,对于测试代码而言非常好,在这里您可以使用模拟对象来测试正在测试的函数的补丁依赖性)

答案 1 :(得分:0)

是的,因为Typedef模块中的变量位于模块范围内,只要导入该模块,该范围就可用。

如需进一步阅读,请查看Python Scopes and Namespaces