python: one line function returning a generator
我想以更简洁的方式编写下面的函数:
1 2 3 4 5 | def sum_list(l): x = 0 for i in l: x += i return x |
我知道我很容易做到:
1 2 | def sum_list(l): return sum(l) |
号
但为了更好地理解Python,我一直在修改生成器和列表理解。
所以我试着:
1 2 3 | def sum_list(l): x = 0 return (x += i for i in l) |
但这只是返回生成器对象。我记得在某个地方读到过,它应该在sum()之类的操作中使用,或者在那些行中使用,但是我似乎再也找不到那篇文章了。
有人能告诉我一些关于这方面的文献的方向吗,或者花点时间来解释一些关于这种性质的陈述的基础知识吗?
我想你需要
1 2 | def sum_iterable(a): return reduce(lambda x,y: x+y, a, 0) |
基本上,reduce允许您将iterable或list"折叠"成一个值。对于应该返回单个值的对象,不需要生成器表达式。