递归调用中的局部const

时间:2015-05-17 18:14:00

标签: python memory-management recursion

嗯......代码优先。

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副本。我知道我可以制作全局的词典,但我不想要,因为这个词典只涉及魔法功能。所以,我可以创建一些类并将spells_dict和函数放入其中,但它看起来不是一个好的解决方案。

有没有办法只用一份spells_dict就可以做到这一点?

1 个答案:

答案 0 :(得分:1)

我认为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 ""