Python - 全局数组

时间:2015-12-09 09:21:33

标签: python python-2.7

我试着这样做:

x = []
def func():
   for y in range(0,5):
       x.append(y)

def func2():
   for i in range(0, 5):
       print x[i]

我收到错误:

  

IndexError:列表索引超出范围

如何放置全局x数组?并在func2中访问x数组的值。

4 个答案:

答案 0 :(得分:4)

如果在致电func2

之前致电func,您将收到该错误消息
>>> x=[]
>>> func2()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in func2
IndexError: list index out of range
>>> func()
>>> func2()
0
1
2
3
4

答案 1 :(得分:2)

列表索引超出范围是因为在调用func2()时列表中没有元素。

因为你在一系列范围内循环(0,5)用x = [0] * 5初始化列表

x = []
def func():
   for y in range(0,5):
       x.append(y)

def func2():
   for i in range(0, 5):
       print x[i]

func()
func2()

如果调用func2()而不实际包含函数func()的元素,显然print x[i]将引发Index Out of of Bound异常,因为列表为空。

答案 2 :(得分:2)

原始问题的解决方案如下所示:

x = []

def func():
    y = 2
    x.append(y)

def func2():
    for i in range(0, 5):
        print(x[i])

拨打func 5次,然后就可以了:

for n in range(5):
    func()

func2()

输出:

2
2
2
2
2

您的列表x仍然是空的。致电func会追加2。整个代码并没有真正有用,但它演示了它是如何工作的。

答案 3 :(得分:2)

如果您早于func()宣布func2()

,那无关紧要

您应该在func()之前致电func2(),否则您将收到错误,因为您的数组仍为空。

所以这个:

x = []
def func():
    for y in range(0,5):
        x.append(y)

def func2():
    for i in range(0, 5):
        print x[i]
func()
func2()

务!

但是这个:

x = []
def func():
    for y in range(0,5):
        x.append(y)

def func2():
    for i in range(0, 5):
        print x[i]
func2()
func()

不要!