0
我重構代碼是這樣的:瞭解蟒蛇內建希望減少
def get_ana(word):
return ''.join(sorted(word.lower()))
def combine_anagrams(words):
sets = {}
for word in words:
ana = get_ana(word)
sets[ana] = sets.get(ana, []) + [word]
return sets.values()
爲了這樣的事情:
def combine_anagrams(words):
return reduce(add_ana, words, {}).values()
def add_ana(sets, word):
ana = ''.join(sorted(word.lower()))
sets[ana] = sets.get(ana, []) + [word]
return sets
我知道這被認爲是更多的功能。
但是,改變(在Python中)的真正好處是什麼?
內存使用,GC,不管它可能是什麼。
我認爲第一個代碼更好。它更具可讀性,它們在計算上類似。你的「功能性」代碼違背了理想:一個函數不應該用'sets [ana] = ...行來改變對象的狀態,所以它沒有「更可預測」的優點。 –
可讀性降低? ;)FWIW,[Guido不是'reduce'的粉絲](http://www.artima.com/weblogs/viewpost.jsp?thread=98196),尤其是當它的函數arg不是關聯的,而且它不是在Python 3中內置的時間更長:它已被降級到'functools'。 Guido想完全清除它,但是在抗議隨後發生後被迫保留。 –
@Jared,我意識到我正在改變這個狀態。你的觀點是我的問題的緊張。然而,也許'{}'作爲一個參數來減少坐在內存不同,因此有好處。 –