我需要一个全局变量s=set()来帮助我执行某些递归函数。在我运行函数之后,我希望它再次成为一个空集。对我来说有什么简单的方法吗?我使用的是python 3.4.1
ADD:所以我想遍历一棵树,得到不同节点的数量。为了做到这一点,我使用了一个全局变量SET=SET()来保存相同节点的记录。调用函数后,我想重置全局变量SET。
SET = set()
def distinct_node_count(root):
global SET
if not root.children:
if root.value.__repr__() not in SET:
SET.add(root.value.__repr__())
return 1
else:
return 0
else:
if root.value.__repr__() not in SET:
SET.add(root.value.__repr__())
return 1 + sum([distinct_node_count(child) for child in root.children])
else:
return sum([distinct_node_count(child) for child in root.children])
不要使用全局变量,而是使用默认值的参数
像这个
def recursive(oneparam, secondparam,*, s=None):
if s is None:
s = set()
if secondparam < 0:
return 0
return 1 + recursive(oneparam,secondparam-1,s=s)
以前的版本并没有真正改变合同,但如果你绝对不想添加额外的参数,只需使用辅助功能
def recursive(oneparam, secondparam):
def inner(oneparam, secondparam, s):
if secondparam < 0:
return 0
return 1 + inner(oneparam,secondparam-1,s)
inner(oneparam,secondparam,set())