我在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
的一个稍微简单的版本:当我们调用
fix(defaultdict)
时,我们当然会得到lambda: defaultdict(fix(defaultdict))
。它每次都会返回一个单独的lambda
,但是所有这些lambda
函数都有相同的净效果。调用第一个lambda
时,它会创建另一个,并将其设置为返回的defaultdict
的工厂我们得到的
defaultdict
将使用lambda
来创建默认值。因此,当插入一个键值对时,该值将成为另一个defaultdict,它有自己的lambda,可以做同样的事情这使得我们可以在不首先创建子目录的情况下尽可能深地存储密钥,因为在每个级别上,如果需要,将自动创建新的层(并且该层被设置为在需要时创建下一层,以此类推)
实际代码中的
fix
只是将其他参数转发给defaultdict
构造函数。示例代码不使用该功能,但它可以用来初始化内容,而不是一次分配一个内容(有关详细信息,请参阅defaultdict
的文档)相关问题 更多 >
编程相关推荐