我发布这个答案,但我如果我理解你的问题,我不太确定。你提到了这个问题:Global Variable from a different file Python
不过,我相信,我不是从变量file.foo
越来越因为foo
没有明确定义file.py
的输出。 foo
是从读文件创建的矩阵数组。
你提到file.foo
在file
没有明确定义。我从您的陈述中了解到,foo
住在file
模块中的另一个对象内。因此,为了得到foo
你需要通过这个对象来获取它:
import file
file.object.foo
或:
import file *
object.foo
file.py
从ReadFile的到foo
附加价值从而file.py
必须独立运行定义foo
。
你基本上会导入file
模块,以从ReadFile的附加价值。因此,在file
内,您将打开读取文件以将其值附加到foo
,该基本上是file
的对象:file.foo
。
我只是希望我得到你所问的。
编辑:
假设您发布的代码是在一个名为file
模块文件:
color_matrices = Full_Layout(array=org_arr, resolution=1)
def Globalize_RPF():
global color_matrices
color_matrices
是全球性的,因为它是在模块的顶级分配。里面Globalize_RPF
功能本声明global color_matrices
将宣布你打算改变全局变量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
是本地功能。那是什么意思?这意味着变量将不能在函数外部访问。因此,即使您尝试在file
模块中的功能之后使用color_matrices
,它也不起作用。
color_matrices = Full_Layout(array=org_arr, resolution=1) # Top-level assignment, global var
def Globalize_RPF():
# process color_matrices
现在color_matrices
是一个全局变量,那就是你可以在函数中使用它里面file
模块,类表达式和其他许多地方,你可以在任何地方在file
,因为其全球现在引用该变量。
from file import color_matrices
RPF = color_matrices
print(RPF)
如果您需要重新分配color_matrices
到函数内部新的结果,使用global
:由于color_matrices
是全球性的,而不是现在在函数内部的局部变量,我们可以通过导入file
像下面得到它的价值关键字:
def Globalize_RPF():
global color_matrices
color_matrices = ... # Changes global color_matrices
如果你只使用color_matrices = ...
在函数体中,你会简单地创建color_matrices
这是本地的功能,你会影/覆盖全球范围的color_matrices
,这是在顶部分配一个日e模块。
所以也许这就是问题:foo不住在文件模块中的对象中。相反,它只是一个由解析读取文件的自定义函数定义的变量。所以当我试图在当前的pyfile中打印(file.foo)时,没有任何返回。也许让富有生活在一个对象中的解决方案?我不是Python的专家,所以我不知道我会知道如何做到这一点。 –
好的,因为'foo'是一个函数中的局部变量,所以它可以被该函数和任何封闭函数访问(如果有的话)。为了在通过模块名称“file.foo”限定名称时使'foo'可访问,您需要将分配移至全局范围。也就是说,要么在全局函数中声明'foo'全局函数,例如'global foo',然后在函数内为'foo':'foo = ...'赋值或者将foo的赋值移到功能,在模块的顶层。 – direprobs
请参阅编辑,我清楚不知道我在做什么 –