python:返回生成器的一行函数

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()之类的操作中使用,或者在那些行中使用,但是我似乎再也找不到那篇文章了。

有人能告诉我一些关于这方面的文献的方向吗,或者花点时间来解释一些关于这种性质的陈述的基础知识吗?


我想你需要reduce-http://docs.python.org/library/functions.html reduce

1
2
def sum_iterable(a):
    return reduce(lambda x,y: x+y, a, 0)

基本上,reduce允许您将iterable或list"折叠"成一个值。对于应该返回单个值的对象,不需要生成器表达式。