在 Python 3.4 中,我想调用在父函数外部定义的子函数,该子函数仍然可以访问父函数的作用域(请参见下面的示例)。虽然为了便于查看,我在下面的示例中将函数命名为父函数和子函数,但我正在考虑的函数具有非常独立的任务,因此单独定义它们更有意义。我习惯在 JavaScript 中经常执行以下操作:
def parent():
test = 0
child()
def child():
test += 1
print(test)
但是,我在执行上述代码时遇到错误。我尝试了使用“nonlocal”关键字的第二种变体,但也失败了:
def parent():
test = 0
child()
def child():
nonlocal test
test += 1
print(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