如何可视化和理解这段代码

How to visualize and understand this piece of code

我从 https://quanttype.net/posts/2016-03-29-defaultdicts-all-the-way-down.html 那里看到这段代码,但我无法理解它是如何工作的或为什么工作。我很想知道有人如何想象并理解这一点

运行调试器中的这个没有产生理解

def fix(f):
    return lambda *args, **kwargs: f(fix(f), *args, **kwargs)

>>> from collections import defaultdict
>>> d = fix(defaultdict)()
>>> d["a"]["b"]["c"]
defaultdict(<function <lambda> at 0x105c4bed8>, {})

让我们考虑一个稍微简单的版本 fix:

def fix(f):
    return lambda: f(fix(f))

当我们调用fix(defaultdict)时,当然得到lambda: defaultdict(fix(defaultdict))。每次都会 return 一个单独的 lambda,但是所有这些 lambda 函数都具有相同的净效果。当调用第一个 lambda 时,它会创建另一个,并将其设置为 return 的 defaultdict 的工厂。

我们得到的defaultdict,将使用lambda来创建默认值。所以当插入键值对时,值将成为另一个 defaultdict,它有自己的 lambda,可以做同样的事情。

这让我们可以根据需要存储尽可能深的密钥,而无需先创建子字典,因为在每个级别都会根据需要自动创建新层(并且该层会设置为在需要时创建下一层,等等)。

实际代码中的fix只是将附加参数转发给defaultdict构造函数。示例代码不使用该功能,但它可用于初始化内容而不是一次分配一个内容(有关详细信息,请参阅 defaultdict 的文档)。