0

我想创建一个全局数组,以便这些函数 fib() 和 shoot() 可以共享它。这是我的代码:

global f
f=[0]*1000
def fib(n):

    f[0]=1  ## error here  
    f[1]=1
    for i in xrange(2,n+1):
        f[i]=f[i-1]+f[i-2]

def shoot(aliens):
    ...
    place to use f[] here

fib(999)
print shoot(line)

但是它显示错误。

Traceback (most recent call last):
File  line 56, in <module>
fib(999)
line 42, in fib
f[0]=1
TypeError: 'file' object does not support item assignment

请帮忙!

编辑:下面的评论让我意识到我在代码的另一部分中没有显示“with open('somefile') as f”。我删除了它,现在它正在工作。

4

3 回答 3

2

您用以下内容覆盖了您的列表f

with open(...) as f:

您可以:

  • 重命名列表

  • 更改文件的名称(例如,类似as myfile

因为发生了这种情况,所以您尝试使用索引访问列表,但您实际上是在使用文件对象。这就是为什么你得到一个TypeError: 'file' object does not support item assignment

于 2013-07-19T09:05:03.533 回答
0

只需将该行移动global f到您的函数中:

f=[0]*1000
def fib(n):
    global f

    f[0]=1  ## error here  
    f[1]=1
    for i in xrange(2,n+1):
        f[i]=f[i-1]+f[i-2]

def shoot(aliens):
    ...
    global f
    ... do stuff with f here ...

或者,f作为参数传入函数:

def fib(n, f):
    ...

def shoot(aliens, f):
    ...
于 2013-07-19T08:55:29.343 回答
0

您可以简单地在开头声明数组。

每当您希望修改/访问/更改您的数组时,只需使用关键字 global 来引用该数组。

这是一个例子:

myarray=[]

def func():
     global myarray
     myarray[0]=1

干杯!

于 2013-07-19T09:24:00.470 回答