def list_gen(a,b,c,d):
print(a,b,c,d)
l=[]
for i in range(a,b):
for j in range(c,d):
l.append(d[i,j])
return l
当我将参数传递给函数list_gen(0,3,0,3)时,我得到以下错误:
TypeError Traceback (most recent call last)
<ipython-input-51-ac343943d448> in <module>()
----> 1 list_gen(0,3,0,3)
<ipython-input-49-afc3d3a347a9> in list_gen(a, b, c, d)
4 for i in range(a,b):
5 for j in range(c,d):
----> 6 l.append(d[i,j])
7 return l
TypeError: 'int' object is not subscriptable
但是这段代码没有任何问题。谁能告诉我这里的错误是什么?
for i in range(0,3):
for j in range(0,3):
print(d[i,j])
显然你有一个全局变量d
包含你想要访问的字典。但是您使用d
作为函数参数的名称,因此隐藏了全局名称。当你使用d[i,j]
时,它会尝试索引数字3
,这是不可能的。
解决方案是为函数参数使用不同的变量。
def list_gen(a,b,c,e):
print(a,b,c,e)
l=[]
for i in range(a,b):
for j in range(c,e):
l.append(d[i,j])
return l
如果你使用比d
更冗长,更有意义的变量名,你会遇到这样的问题。
范围内的参数必须是整数,因为for j in range(c,d):
没有抛出错误,它意味着d是int,你不能使用行l.append(d[i,j])
中的d [i,j]来引用int。您可能有一个名为d的变量,其范围在print语句期间处于活动状态。