蟒蛇:一行函数返回一个发电机

问题描述:

我想写下面的功能更简洁的方式:蟒蛇:一行函数返回一个发电机

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()这样的操作中使用它,但我似乎无法再找到那篇文章。

有人可以向我指出一些涵盖这一点的文献的方向,或者可能花时间来解释一下这种性质陈述的基础知识吗?

+2

return(x + = i for i in l)这个东西在Python中不起作用,python不允许在理解或生成器内部进行赋值。 –

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

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

基本上,减少让你“折叠”的迭代或列表到一个值。你不会想要一个生成器表达式来返回一个应该返回一个值的东西。

+0

如果你不影响内置的sum()函数,并且添加正确的返回语句 – jdi

+2

这是我们在'sum()'存在之前完成的方式 –

+0

@jdi - 谢谢指出出。更新。 – spinlok