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

Ver*_*int 0 python generator

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

def sum_list(l):
    x = 0
    for i in l:
        x += i
    return x
Run Code Online (Sandbox Code Playgroud)

我知道我可以轻松地做到这一点:

def sum_list(l):
    return sum(l)
Run Code Online (Sandbox Code Playgroud)

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

所以我尝试过:

def sum_list(l):
    x = 0
    return (x += i for i in l)
Run Code Online (Sandbox Code Playgroud)

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

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

spi*_*lok 5

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

def sum_iterable(a):
    return reduce(lambda x,y: x+y, a, 0)
Run Code Online (Sandbox Code Playgroud)

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

  • 这就是我们在`sum()`存在之前做的方式 (2认同)