我想做一些类似于这里概述的事情:
来自不同文件的全局变量 Python
但是我相信我没有从变量 file.foo 获得输出,因为 foo 没有在 file.py 中明确定义。Foo 是从读取文件创建的矩阵数组。file.py 将读取文件中的值附加到 foo,因此 file.py 必须独立运行才能定义 foo。
因此,我想知道是否有办法将 python 变量的定义转储到我以后可以从中调用的某个位置。我的另一种选择是将此变量转储到 txt 文件中,我真的不想这样做以避免无关的文件创建和其他复杂性。
编辑:
这是我所拥有的:
color_matrices = Full_Layout(array=org_arr, resolution=1)
def Globalize_RPF():
global color_matrices
然后我尝试在我当前的 pyfile 中调用color_matrices,如下所示:
from ThreeD_Core_Distribution import color_matrices
RPF = color_matrices
print(RPF)
我发布了这个答案,但我不太确定我是否理解了你的问题。你提到了这个问题:来自不同文件的全局变量 Python
但是我相信我没有从变量
file.foo
获得输出,因为foo
没有在file.py
中明确定义。foo
是从读取文件创建的矩阵数组。
您提到file.foo
未在file
中明确定义。我从你的陈述中了解到,foo
存在于file
模块中的另一个对象中。因此,为了获得foo
您需要通过该对象获取它:
import file
file.object.foo
或:
import file *
object.foo
file.py
将读取文件中的值追加到foo
因此file.py
必须独立运行才能定义foo
。
您基本上会导入file
模块,以便从读取文件中附加值。因此,在file
内,您将打开readfile以将其值附加到foo
这基本上是file
的对象:file.foo
。
我只是希望我明白你的问题。
编辑:
假设您发布的代码位于名为file
的模块文件中:
color_matrices = Full_Layout(array=org_arr, resolution=1)
def Globalize_RPF():
global color_matrices
color_matrices
是全局的,因为它是在模块的顶层分配的。函数内部global color_matrices
Globalize_RPF
语句将声明您打算更改全局变量color_matrices
:
def Globalize_RPF():
color_matrices = Full_Layout(array=org_arr, resolution=1) # Local to function, you cannot use `file.foo` after importing `file` module
以这种方式分配时,color_matrices
是函数的本地。那是什么意思?这意味着变量将无法在函数外部访问。因此,即使您尝试在模块中的函数之后使用color_matrices
file
,它也不会起作用。
color_matrices = Full_Layout(array=org_arr, resolution=1) # Top-level assignment, global var
def Globalize_RPF():
# process color_matrices
现在color_matrices
是一个全局变量,也就是说你可以在函数、类、表达式和许多其他地方file
模块中使用它,你可以在file
的任何地方引用该变量,因为它现在是全局的。因为color_matrices
现在是全局的,而不是函数内的局部变量,所以我们可以通过导入如下file
来获取它的值:
from file import color_matrices
RPF = color_matrices
print(RPF)
如果需要将color_matrices
重新分配给函数中的新结果,请使用global
关键字:
def Globalize_RPF():
global color_matrices
color_matrices = ... # Changes global color_matrices
如果仅在函数体内使用color_matrices = ...
,则只需创建函数的本地color_matrices
,并且将隐藏/覆盖全局作用域(在模块顶部分配的全局作用域)color_matrices
。