递归调用中的局部常量
Local const in recursion call
嗯...先写代码。
def magic(node):
spells_dict = {"AR_OP":ar_op_magic, "PRE_OP":pre_op_magic}
if node:
if node.text in spells_dict:
return spells_dict[node.text](node)
else:
return magic(node.l) + magic(node.r)
else:
return ""
在递归调用期间,将创建大量 spells_dict 副本。我知道我可以使那个字典成为全局的,但我不想,因为这个字典只与魔术功能有关。所以,我可以创建一些 class 并放入 spells_dict 并对其起作用,但它看起来不是一个好的解决方案。
有什么方法可以只用一份 spells_dict 来完成吗?
我没有发现 MAGIC_SPELLS
常量有任何问题。您可以将其定位在 magic
函数附近,所以您知道,它们属于一起:
def magic_default(node):
return magic(node.l) + magic(node.r)
MAGIC_SPELLS = {
'AR_OP': ar_op_magic,
'PRE_OP': pre_op_magic,
}
def magic(node):
if node:
func = MAGIC_SPELLS.get(node.text, magic_default)
return func(node)
return ""
嗯...先写代码。
def magic(node):
spells_dict = {"AR_OP":ar_op_magic, "PRE_OP":pre_op_magic}
if node:
if node.text in spells_dict:
return spells_dict[node.text](node)
else:
return magic(node.l) + magic(node.r)
else:
return ""
在递归调用期间,将创建大量 spells_dict 副本。我知道我可以使那个字典成为全局的,但我不想,因为这个字典只与魔术功能有关。所以,我可以创建一些 class 并放入 spells_dict 并对其起作用,但它看起来不是一个好的解决方案。
有什么方法可以只用一份 spells_dict 来完成吗?
我没有发现 MAGIC_SPELLS
常量有任何问题。您可以将其定位在 magic
函数附近,所以您知道,它们属于一起:
def magic_default(node):
return magic(node.l) + magic(node.r)
MAGIC_SPELLS = {
'AR_OP': ar_op_magic,
'PRE_OP': pre_op_magic,
}
def magic(node):
if node:
func = MAGIC_SPELLS.get(node.text, magic_default)
return func(node)
return ""