在Python中从另一个文件导入变量

时间:2017-08-16 09:57:35

标签: python

我已经声明了一些变量,并在variables.py

中用一些值初始化它们

variables.py的内容:

flag = 0
j = 1

我想在另一个文件中使用这些值:main_file.py如: main_file.py的内容

import variables
    if(flag == 0) :
       j = j+1

但是我收到以下错误,

NameError: name 'flag' is not defined

我该如何解决这个问题?

4 个答案:

答案 0 :(得分:4)

除了使用变量之外,你所做的一切都是正确的。

在main_file.py文件中:

if(variables.flag == 0) :
    variables.j = variables.j + 1

(或)

使用以下标题:

from variables import *

(或)

from variables import flag, j

将flag和j(或您要使用的任何其他变量)的所有引用替换为前缀'variables'。

因为这只是变量的副本,所以如果你在main_file.py中修改它们,那么variables.py中的值就不会受到影响

答案 1 :(得分:3)

您可以使用

import variables

然后像这样访问vairables:

variables.flag
variables.j

或者您可以使用:

from variables import flag, j

然后只按名字访问vaiables。

  

重要

     

请注意,在第二种情况下,您将使用复制变量,并在一个模块中修改它们对其他模块中的变量没有影响!

答案 2 :(得分:1)

您需要从文件中导入变量。您可以像这样导入所有这些:

from variables import *
if(flag == 0) :
   j = j+1

或者引用导入模块中的变量,例如variables.flag

import variables
if(variables.flag == 0) :
   j = j+1

或者像这样一个一个地导入它们

from variables import flag, j
if(flag == 0) :
   j = j+1

最好的方法是使用variables.flag保留命名空间variables,因为当代码变大时,您始终可以知道标志变量来自模块变量。这也使您能够在module2.flag

等其他模块中使用相同的变量名称标志

答案 3 :(得分:0)

您已经有足够的答案告诉您如何解决问题。所以我会告诉你何时需要使用什么。

选项1:import保留命名空间

import variables
if variables.flag == 0:
    variables.j += 1

如果您有来自不同模块的许多此类flagj,并且您不希望解释器在每个版本之间混淆,那么首选。

选项2:import进入命名空间

from variables import flag, j
if flag == 0:
    j += 1

当您确定不会发生名称冲突时工作。我向from ... import ..., ...推荐from ... import *,因为在前一种情况下,您知道您要导入的内容。在后一种情况下,您可能会导入一个从同一名称的另一个模块覆盖现有对象的对象,从而导致问题。