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,我意识到我正在改变这个状态。你的观点是我的问题的紧张。然而,也许'{}'作为一个参数来减少坐在内存不同,因此有好处。 –