python在函数之间传递列表

时间:2013-03-19 01:09:37

标签: python list parameter-passing

我正在努力将列表(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()

1 个答案:

答案 0 :(得分:4)

start_node结束时,您执行此操作:

return node, holder

...但是当你打电话时,你会这样做:

node = start_node(Alist)

这意味着您的本地node变量最终会成为node, holder的元组。你不想要那个。你想要这个:

node, holder = start_node(Alist)

与此同时,你说"我想我在main()函数"中正确传递了它,但你在{{ 1}}功能:

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 holderdef 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) 结束,或者返回一些其他适当的值)。< / p>

最后,正如我在你的另一个问题中所说:如果你继续使用相同的名称作为参数和传入的值,你就会像这样一直让自己感到困惑。如果您使用了不同的名称,那么您可以更轻松地查看自己缺失的内容。甚至像每个人的前缀一样简单:

{{1}}