Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
外包的python模块没有';t更新全局_Python_Import_Globals - Fatal编程技术网

外包的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)