有人可以解释 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
.
谁能解释一下 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
.