我已经声明了一些变量,并在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
我该如何解决这个问题?
答案 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
如果您有来自不同模块的许多此类flag
和j
,并且您不希望解释器在每个版本之间混淆,那么首选。
选项2:import
进入命名空间
from variables import flag, j
if flag == 0:
j += 1
当您确定不会发生名称冲突时工作。我向from ... import ..., ...
推荐from ... import *
,因为在前一种情况下,您知道您要导入的内容。在后一种情况下,您可能会导入一个从同一名称的另一个模块覆盖现有对象的对象,从而导致问题。