如何避免无限制地重复自己而编写这段代码呢?
fields = row.split('__')
if len(fields) == 1:
foo = getattr(bundle.obj, fields[0])
elif len(fields) == 2:
foo = getattr(getattr(bundle.obj, fields[0]), fields[1])
elif len(fields) == 3:
foo = getattr(getattr(getattr(bundle.obj,
fields[0]), fields[1]), fields[2])
# etc ..
reduce
的,但自那以后他一直想摆脱它。许多其他核心开发人员也同意他的看法。他们非常讨厌它,在3.0转换中,他们勉强同意将其移动到functools
,并停止谈论它,而不是完全删除它。(就我个人而言,我认为有些情况下reduce
可以使事情更易读——虽然很少,但这绝对是其中之一。) - abarnertmap
也有很多抱怨吧? - torekmap
和reduce
都来自于各种函数式语言,Python的许多部分也是从其他语言中借鉴(我是说抄袭)而来的。将思想与可行的语法等正确地融合在一起,这就需要“口味”的参与了。Python有这种能力,但Perl就不太行。:D - torekmap
和filter
,但由于各种人开始使用map
与reduce
进行对比(例如“并非所有函数工具都像reduce
一样无用-看看map
,每个人都喜欢内置的”),他已经转变了想法。 - abarnertmap
和filter
从conses到数组和迭代器的转换比fold
/reduce
更好。 (Haskell只通过为您提供实际上是O(1)的方法来切片无限惰性列表,使fold
与之配合使用。) - abarnert