在python中,访问另一个文件中的全局变量

时间:2014-06-26 07:13:26

标签: python

我有两个python脚本,其中一个脚本包含一个全局变量 globVar ,我希望在另一个文件中使用它。文件结构如下:

File1.py

from File2 import *

globVar = []

def func1(a,b):
  globVar.append(range(a,b))
  printLast()

def main():
  for i in range(1,10):
    for j in range(1,5):
      func1(i,j)

if __name__=="__main__":
  main()

File2.py

from File1 import globVar

def printLast():
  element = globVar[-1]
  print 'Latest element is ',element

不要为代码的生产力而烦恼,这只是一个示例来解决手头的问题。

在运行脚本 File1.py 时,会弹出一个错误, globVar [-1] 列表索引超出范围。或者简单地说,列表为空

为什么会这样?

修改

这个问题,正如最初发布的那样,包含“来自File2 import printLast”作为 File1.py 的第一行。但是这种语法导致了ImportError,正如评论中 @ user2357112 所指出的那样。

现在它已从File2 import * 更改为,错误是IndexError,我试图指出它开始。

任何合理的解释都将不胜感激。

2 个答案:

答案 0 :(得分:3)

这是因为直接从python执行的主模块File1.py是特殊的,当你导入它时,它实际上是第二次创建的,因此有2 globVar个。请参阅:http://python-notes.curiousefficiency.org/en/latest/python_concepts/import_traps.html#executing-the-main-module-twice

答案 1 :(得分:0)

如果你在最后删除File1.py中的if语句,这将正常工作。像这样:

<强> File1.py

globVar = []

def func1(a,b):
    globVar.append(range(a,b)
    printLast()

def main():
    for i in range(1,10):
        for j in range(1,5):
            func1(i,j)

globVar = main()

这将确保globVar具有值数组。