[英]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.