1

我正在努力将列表(holder包含[0,0])传递给另一个函数。我想check_neighbours拿起列表,然后做一些进一步的处理。我想我正确地传递了它,main()但我不确定我必须做什么才能让列表在内部调用时简单地显示其内容check_neighbours。我尝试了一个=持有人,但我收到了错误:

全局名称“持有人”未定义

我相信我必须放在holder = #something这里,但我不知道是什么。

 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()
4

1 回答 1

4

在 结束时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_neighborsholder变量,替换您传入的任何内容。通常,这是一件非常合理的事情(想想my_name = my_name.replace('Joseph', 'Joe')),但要确保它确实是您想要的(当然,确保check_neighbors以执行 areturn 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)
于 2013-03-19T01:11:55.107 回答