我正在类中添加一些全局变量。以下各项适用:
class AssignGlobal():
@staticmethod
def assign():
code = 'xyz'
index = 2
globals()[code] = index
AssignGlobal.assign()
xyz ## returns 2
但是,如果我将AssignGlobal类外包,则globals将不再更新。实际上,我不确定这个导入究竟做了什么。为什么它不更新我的全局
from backtester.outsourced import AssignGlobal as ag
## assume I created a file outsourced.py in the backtested subdirectory from where I am. It contains the AssignGlobal class above
ag.assign()
xyz
NameError Traceback (most recent call last)
<ipython-input-3-8714e0ef31ed> in <module>
----> 1 xyz
NameError: name 'xyz' is not defined
Python全局变量的作用域基本上是它们在其中定义的模块
当您在模块内声明全局变量时,它们将被添加到模块
__dict__
,并且可以作为属性从另一个模块访问在您的例子中,您正在导入
outsourced
模块的模块在其__dict__
中不会有xyz
,而是outsourced
模块对象在您调用AssignGlobal.assign()
后会设置一个属性xyz
以下代码将输出
2
:原因是,当调用
assign
时xyz
是在outsourced
模块的作用域中定义的,而不是作为全局变量导入的地方要获取
xyz
值,需要将其作为outsourced
模块对象的属性获取{a1}显示了如何在模块之间共享变量
相关问题 更多 >
编程相关推荐