外包的python模块没有';t更新全局
我正在类中添加一些全局变量。以下各项适用:外包的python模块没有';t更新全局,python,import,globals,Python,Import,Globals,我正在类中添加一些全局变量。以下各项适用: class AssignGlobal(): @staticmethod def assign(): code = 'xyz' index = 2 globals()[code] = index AssignGlobal.assign() xyz ## returns 2 但是,如果我将AssignGlobal类外包,则globals将不再更新。实际上,我不确定这个导入究竟做了什么
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
namererror回溯(最近一次调用)
在里面
---->1 xyz
名称错误:未定义名称“xyz”
Python全局变量的作用域基本上是定义在其中的模块
当您在模块内声明全局变量时,它们将被添加到模块\uuuu dict\uuuu
,并且可以作为属性从另一个模块访问
在您的情况下,导入外包的模块的目录中不会有xyz
,而是在调用AssignGlobal.assign()
后,外包的模块对象将设置属性xyz
以下代码将输出2
:
import outsourced
outsourced.AssignGlobal.assign()
print(outsourced.xyz)
原因是,当调用assign
时,xyz
是在外包的
模块的范围内定义的,而不是作为全局变量导入的地方
要获取xyz
值,需要从module对象中获取它作为属性
显示了如何在模块之间共享变量。可以,但是没有-可能是非规范的-方法将全局变量从其他模块“下载”到主模块的全局变量,以避免使用前缀?@DISC-O您可以将其分配给全局变量并命名为xyz
import outsourced
outsourced.AssignGlobal.assign()
print(outsourced.xyz)