Python 中函数间传递列表

1 投票
1 回答
1387 浏览
提问于 2025-04-17 19:35

我在把一个列表(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 个回答

4

start_node的最后,你做了这个:

return node, holder

…但是当你调用它时,你这样做:

node = start_node(Alist)

这意味着你的本地node变量变成了一个包含nodeholder的元组。你并不想要这样。你想要的是:

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)

撰写回答