我有两个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,我试图指出它开始。
任何合理的解释都将不胜感激。
答案 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具有值数组。