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

时间:2012-05-02 04:35:43

标签: python generator

我想以更简洁的方式编写以下函数:

def sum_list(l):
    x = 0
    for i in l:
        x += i
    return x

我知道我可以很容易地做到这一点:

def sum_list(l):
    return sum(l)

但为了更好地理解python,我一直在修改生成器和列表理解。

所以我试过了:

def sum_list(l):
    x = 0
    return (x += i for i in l)

但这只是返回生成器对象。我记得在某个地方读过它应该在像sum()这样的操作中使用,或者沿着这些行的某些东西,但我似乎找不到那篇文章了。

有人可以指出我的一些文献的方向,或者可能花时间解释一些围绕这种性质的基础知识吗?

1 个答案:

答案 0 :(得分:5)

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

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

基本上,reduce允许您将可迭代或列表“折叠”为值。您不希望生成器表达式应该返回单个值。