Python 中函数间传递列表
我在把一个列表(holder
,里面有 [0,0]
)传给另一个函数时遇到了困难。我希望 check_neighbours
能够拿到这个列表,然后进行一些后续处理。我觉得在 main()
里传递得没问题,但我不太确定在 check_neighbours
里如何才能简单地显示这个列表的内容。我试过用 =
holder,但收到了一个错误:
全局名称 "holder" 未定义
我觉得我应该在这里写 holder = #某个东西
,但我不知道该写什么。
def create_matrix(file):
with open('network.txt') as f:
Alist = []
for line in f:
part = []
for x in line.split(','):
part.append(int(x))
Alist.append(part)
return Alist
def start_node(Alist):
i=0
j=0
#point node to pos [0][0] of Alist
node = Alist[i][j]
#create a list to hold co-ordinates
holder = []
holder.append(i)
holder.append(j)
print holder
return node, holder
#test neighbours to see if they can be used
def check_neighbours(node, Alist):
holder = #something
#code begins here
def main():
file = ("F:/media/KINGSTON/Networking/network.txt")
Alist = create_matrix(file)
node = start_node(Alist)
holder = check_neighbours(node, Alist)
main()
1 个回答
在start_node
的最后,你做了这个:
return node, holder
…但是当你调用它时,你这样做:
node = start_node(Alist)
这意味着你的本地node
变量变成了一个包含node
和holder
的元组。你并不想要这样。你想要的是:
node, holder = start_node(Alist)
同时,你说“我觉得我在main()
函数中传递得很正确”,但实际上你在main
函数中根本没有传递它:
holder = check_neighbours(node, Alist)
这里没有办法让check_neighbours
获取到holder
,因为你没有在这里给它holder
。
而且,当你定义check_neighbours
时,你这样做了:
def check_neighbours(node, Alist):
holder = #something
这并没有接收一个holder
参数,而是定义了一个新的本地变量,名字也叫holder
。所以,把那两行改成:
def check_neighbours(node, Alist, holder):
然后用这个调用它:
holder = check_neighbours(node, Alist, holder)
另外,注意你把check_neighbors
的结果赋值回holder
变量,这样会替换掉你传入的任何值。通常,这样做是合理的(想想my_name = my_name.replace('Joseph', 'Joe')
),但要确保这真的是你想要的(当然,也要确保check_neighbors
最后有做return holder
,或者返回其他合适的值)。
最后,正如我在你其他问题中所说的:如果你一直使用相同的名字来命名你的参数和传入的值,你会不断让自己感到困惑。如果你使用不同的名字,你会更容易看出自己缺少了什么。即使是简单的在每个名字前加个前缀:
def main():
file = ("F:/media/KINGSTON/Networking/network.txt")
my_list = create_matrix(file)
my_node, my_holder = start_node(my_list)
my_new_holder = check_neighbours(my_node, my_list, my_holder)