python在函数之间传递变量
我试图将一个整数传递给一个函数。我想它可能不起作用,因为我打了很多次电话?例如,我在一个名为Alist的函数中创建了一个2d矩阵,然后返回它。使用第二个函数,我传递Alist并为我想要从Alist返回的值指定一个位置。最后(到目前为止),第三个函数将请求返回值和列表。列表打印正常,但返回值(节点)打印的是0,而它应该是4。我猜它使用的是代码顶部声明的node=0变量,但我不知道为什么 network.txt的第一行如下所示: 0,2,4,1,6,0python在函数之间传递变量,python,variables,parameter-passing,Python,Variables,Parameter Passing,我试图将一个整数传递给一个函数。我想它可能不起作用,因为我打了很多次电话?例如,我在一个名为Alist的函数中创建了一个2d矩阵,然后返回它。使用第二个函数,我传递Alist并为我想要从Alist返回的值指定一个位置。最后(到目前为止),第三个函数将请求返回值和列表。列表打印正常,但返回值(节点)打印的是0,而它应该是4。我猜它使用的是代码顶部声明的node=0变量,但我不知道为什么 network.txt的第一行如下所示: 0,2,4,1,6,0 Alist = [] node = 0 fi
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)
在函数
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
请参阅。这是您的问题,在“运行代码从这里开始”的第二行: 当您调用
start\u node(Alist)
时,它会创建一个局部变量(恰巧被称为node
)并返回其值,您只需忽略该值。这意味着全局变量节点
(尽管名称相同)未被更改,因此仍然为0
要实现这一点,您需要执行与上面一行相同的操作:
node = start_node(Alist)
但是,为了减少代码的混乱,您确实应该做以下几件事: 首先,删除顶部的
Alist=[]
和node=0
。在函数之前定义它们会使您看起来希望它们在函数中用作全局变量,这是误导性的。(对于文件也一样-您确实需要定义它,但不需要在顶部。)
然后,如果您将所有顶级内容(包括这两个全局变量)抽象到一个函数中,这就消除了所有混淆的可能性
因此,留下三个函数定义,然后:
def main():
file = ("F:/media/KINGSTON/Networking/network.txt")
Alist = create_matrix(file)
node = start_node(Alist)
check_neighbours(node, Alist)
main()
您需要向我们展示调用这些函数的代码。理想的问题是,我们可以针对您的输入运行,看看输出与预期的输出有何不同。同时,全局变量、函数参数和局部变量都具有相同的名称是非常令人困惑的,这是一个危险信号,您希望在我们没有看到的代码中有某种魔力。例如,在start\u节点
中设置的节点
不是全局节点。它将被返回,但除非调用方执行类似于node=start\u node(Alist)
的操作来设置全局值,否则全局值不会改变,因此值仍然是0。这不是他的问题。他有一个Alist=create_matrix(file)
,它用该函数返回的值替换全局值。此外,正如他在问题中所说,“伊斯兰主义者印刷得很好”。是节点
不起作用。同时,鼓励他从传递和返回变量转向共享全局变量并不是一个很好的设计选择。
def main():
file = ("F:/media/KINGSTON/Networking/network.txt")
Alist = create_matrix(file)
node = start_node(Alist)
check_neighbours(node, Alist)
main()