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

2024-06-28 11:43:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我在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>, {})

Tags: thelambdahttpsnethtmlargsallfix
1条回答
网友
1楼 · 发布于 2024-06-28 11:43:12

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

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

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

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

这使得我们可以在不首先创建子目录的情况下尽可能深地存储密钥,因为在每个级别上,如果需要,将自动创建新的层(并且该层被设置为在需要时创建下一层,以此类推)

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

相关问题 更多 >