python在函数之间传递变量

时间:2013-03-18 17:48:31

标签: python variables parameter-passing

我正在尝试将整数传递给函数。我认为它可能不起作用,因为我多次调用它?例如,我在一个名为Alist的函数中创建一个2d矩阵,然后返回它。使用第二个函数,我传递Alist并为Alist指定一个值,然后返回。最后(到目前为止),第三个函数将要求返回值和Alist。 Alist打印正常,但返回值(节点)打印时应为4.我猜它是使用在代码顶部声明的node = 0变量,但我不确定原因。

network.txt的第一行如下所示: 0,2,4,1,6,0,

Alist = []
node = 0

file = ("F:/media/KINGSTON/Networking/network.txt")

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):
        node = Alist[0][2]
        print (node)
        return node

#test neighbours to see if they can be used
def check_neighbours(node, Alist):
        print (Alist)
        print (node)
        #check for neighbours. if we start at [0][0] we must look for [0][1]
        #and [1][0]. Figure out how to add 1 to each cell to navigate across.

#running of code begins here
Alist = create_matrix(file)
start_node(Alist)
check_neighbours(node, Alist)

2 个答案:

答案 0 :(得分:2)

这是你的问题,在“运行代码从这里开始”的第二行:

Alist = create_matrix(file) 
start_node(Alist) 
check_neighbours(node, Alist)

当你调用start_node(Alist)时,它会创建一个局部变量(恰好称为node)并返回其值,您只需忽略它。这意味着全局变量node(尽管巧合名称)没有被更改,所以它仍然是0。

为了完成这项工作,你需要做同样的事情:

node = start_node(Alist) 

但是,为了减少您的代码混乱,您应该做一些事情:

首先,移除顶部的Alist = []node = 0。在函数之前定义它们使它看起来像你期望它们在函数中被用作全局变量,这是误导性的。 (同样适用于file - 您确实需要定义,但不能在顶部。)

然后,如果你把所有顶级的东西(包括那两个全局变量)抽象成一个函数,这就会消除所有混淆的可能性。

所以,保留三个函数定义,然后:

def main():
    file = ("F:/media/KINGSTON/Networking/network.txt")
    Alist = create_matrix(file)
    node = start_node(Alist)
    check_neighbours(node, Alist)
main()

答案 1 :(得分:-1)

在函数create_matrix中,当您编写Alist = []时,您正在创建一个新的局部变量Alist,该变量会影响全局变量Alist。请尝试以下方法:

def create_matrix(file):
    global Alist  # Mark Alist as global variable
    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

global keyword documentation中查看更多内容。