递归调用中的局部常量

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 ""