嗯......代码优先。
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就可以做到这一点?
答案 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 ""