繁体   English   中英

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

[英]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)) 它每次都会返回一个单独的lambda ,但所有这些lambda函数具有相同的净效果。 当第一个lambda被调用时,它会创建另一个,并将其设置为它返回的defaultdict的工厂。

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

这让我们可以在不首先创建子字典的情况下将键存储到我们想要的深度,因为在每个级别上,如果需要,将自动创建新层(并且该层被设置为在需要时创建下一个层,依此类推)。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM