python 子函数调用父函数的变量_使用python访问父函数中调用的子函数中父函数的变量...

本文讨论了在Python3.4中如何在独立定义的子函数中访问并修改父函数的作用域内的变量。通过示例展示了尝试直接调用、使用nonlocal关键字以及将变量作为参数传递到子函数的不同方法,并解释了在特定情况下哪种方法更为适用,特别是在图的深度优先搜索算法中的应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在Python3.4中,我想调用一个在父函数之外定义的子函数,它仍然可以访问父函数的作用域(参见下面的示例)。虽然为了便于查看,我在下面的示例中将函数命名为parent和child,但我所考虑的函数具有非常独立的任务,因此单独定义它们更有意义。我习惯于在JavaScript中执行以下操作:def parent():

test = 0

child()

def child():

test += 1

print(test)

但是,我只是在执行上面的代码时得到一个错误。我尝试了第二个变体,使用“nonlocal”关键字也失败了:

^{pr2}$

错误消息为“找不到非本地”test“的绑定”。在python中是否可以像其他许多语言一样实现这一点,或者是以下选项的唯一选项(不是首选):def parent():

test = 0

def child():

nonlocal test

test += 1

print(test)

child()

编辑:将父变量传递给子函数在我的用例中不起作用,因为我需要修改父变量。在

编辑2:父方法和子方法已经是一个类的一部分,它在逻辑上没有计数器的属性。计数器是两个函数内部的东西,用于在图形中跟踪节点访问(请参阅下面的实际示例):class Graph():

def depthFirstSearch(self):

for vertex in self.adjacency_list:

vertex.status = "not visited"

vertex.previous = None

visit_count = 0

for vertex in self.adjacency_list:

if vertex.status == "not visited":

self.depthFirstSearchVisit(vertex)

def depthFirstSearchVisit(self, vertex):

nonlocal visit_count

visit_count += 1

vertex.distance = visit_count

vertex.status = "waiting"

for edge in vertex.edges:

if edge.status == "not visited":

edge.previous = vertex

self.depthFirstSearchVisit(edge)

vertex.status = "visited"

visit_count += 1

vertex.distance_finished = visit_count

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值