有人可以解释 def _trie(): return defaultdict(_trie)

Can someone explain def _trie(): return defaultdict(_trie)

谁能解释一下 def _trie(): return defaultdict(_trie)

我知道defaultdict而且它看起来像一个递归函数。但是我还没有弄清楚函数名如何成为defaultdict的参数。

顺便说一句,我知道了 trie implementation from

defaultdict的参数是一个函数。

开始调用 _trie:

>>> d = _trie()
>>> d
defaultdict(<function _trie at 0x105a9e400>, {})

您现在拥有 defaultdict 的一个实例。如果您尝试访问一个不存在的密钥会发生什么?

>>> d[3]
defaultdict(<function _trie at 0x105a9e400>, {})

你回来 另一个 defaultdict,因为 d[3]d.__getitem__(3) 的缩写,调用 d.__missing__(3),它调用 d.__setattr__(d, 3, _trie().

它反映了 trie 的递归定义:一个 trie 要么是空的,要么是一个带有子节点的节点。这将创建一个 defaultdict,它要么是空的,要么具有映射到具有相同工厂函数的其他 defaultdict 的任意键。

有点像相互递归。调用 _trie 会导致调用 defaultdict,但调用 defaultdict.__getitem__defaultdict.__setitem__(而不是调用 defaultdict 本身)会导致致电 _trie.