可能听起来像是初学者,但是这里有。
我正在导入一个Typedef
脚本,其中包含在整个程序中使用和调用的变量。我这样做只需在包/工作区内的所有脚本上调用'import Typedef'
。
现在我通过调用:
在其中一个脚本中更改Typedef
中的变量
Typedef.myVariable = newVariable
如果其他脚本引用此变量,是否会反映此更改?
如果没有,我该怎么做才能纠正这个问题?
如果有帮助,我使用的是Python 3.4,使用Anaconda的Spyder进行编码。
答案 0 :(得分:3)
是的,正如评论中所述。
你只需要处理像
这样的结构 from TypeDef import myvariable
- 在这种情况下,myvariable是一个新名称
指向导入时变量的值,并且不会“看到”TypeDef.myvariable
的新值的更新。
为本地命名空间中的对象指定名称(或“全局”命名空间 - 在Python中,全局变量实际上是“模块本地”),该名称指向该特定对象。
请谨慎使用,并确保在项目中记录此类用法。这是Python中最常用的,而不是静态语言中所需的“Singletons”。
此外,该技术可用于更改其他模块中的实际功能或类 - 即所谓的“猴子修补”。 (一般来说,对于生产代码来说不是很好 - 另一方面,对于测试代码而言非常好,在这里您可以使用模拟对象来测试正在测试的函数的补丁依赖性)
答案 1 :(得分:0)
是的,因为Typedef
模块中的变量位于模块范围内,只要导入该模块,该范围就可用。
如需进一步阅读,请查看Python Scopes and Namespaces。