2017-04-21 55 views
0

我想要做类似的东西在这里列出:倾销Python变量到另一个文件

Global Variable from a different file Python

不过,我相信,因为foo是没有明确,我没有得到来自可变file.foo输出在file.py中定义。 Foo是一个从readfile创建的矩阵数组。 file.py将readfile中的值附加到foo,因此file.py必须独立运行以定义foo。

因此,我想知道是否有办法将python变量的定义转储到某个位置,我可以稍后调用它。我的另一种选择是将这个变量转储到一个txt文件,我真的不想这样做,以避免无关的文件创建和其他复杂性。

编辑:

这是我有:

color_matrices = Full_Layout(array=org_arr, resolution=1) 

def Globalize_RPF(): 
    global color_matrices 

然后我试图打电话color_matrices在我目前pyfile像这样:

from ThreeD_Core_Distribution import color_matrices 
RPF = color_matrices 
print(RPF) 

回答

0

我发布这个答案,但我如果我理解你的问题,我不太确定。你提到了这个问题:Global Variable from a different file Python

不过,我相信,我不是从变量file.foo越来越因为foo没有明确定义file.py的输出。 foo是从读文件创建的矩阵数组。

你提到file.foofile没有明确定义。我从您的陈述中了解到,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模块。

+0

所以也许这就是问题:foo不住在文件模块中的对象中。相反,它只是一个由解析读取文件的自定义函数定义的变量。所以当我试图在当前的pyfile中打印(file.foo)时,没有任何返回。也许让富有生活在一个对象中的解决方案?我不是Python的专家,所以我不知道我会知道如何做到这一点。 –

+0

好的,因为'foo'是一个函数中的局部变量,所以它可以被该函数和任何封闭函数访问(如果有的话)。为了在通过模块名称“file.foo”限定名称时使'foo'可访问,您需要将分配移至全局范围。也就是说,要么在全局函数中声明'foo'全局函数,例如'global foo',然后在函数内为'foo':'foo = ...'赋值或者将foo的赋值移到功能,在模块的顶层。 – direprobs

+0

请参阅编辑,我清楚不知道我在做什么 –