这个函数必须使用reduce()还是有一种更类似python的方法?

这个函数必须使用reduce()还是有一种更类似python的方法?,python,list-comprehension,reduce,Python,List Comprehension,Reduce,如果我有一个值,以及我想要乘以该值的附加项列表: n = 10 terms = [1,2,3,4] 是否可以使用列表理解来执行以下操作: n *= (term for term in terms) #not working... 或者是唯一的方法: n *= reduce(lambda x,y: x*y, terms) 这是在Python2.6.2上实现的。谢谢 减少并不是唯一的方法。也可以将其编写为简单循环: for term in terms: n *= term 我认为这比

如果我有一个值,以及我想要乘以该值的附加项列表:

n = 10
terms = [1,2,3,4]
是否可以使用列表理解来执行以下操作:

n *= (term for term in terms) #not working...
或者是唯一的方法:

n *= reduce(lambda x,y: x*y, terms)

这是在Python2.6.2上实现的。谢谢

减少并不是唯一的方法。也可以将其编写为简单循环:

for term in terms:
    n *= term

我认为这比使用<代码>缩写< /代码>要清楚得多,尤其是当你认为很多Python程序员从来没有见过“代码>减少/代码>时,这个名字对那些第一次看到它实际所做的事情的人来说几乎没有什么意义。” Pythonic并不意味着把每件事都当作理解来写,或者如果可能的话总是使用功能性的风格。Python是一种多范式语言,在适当的时候编写简单的命令式代码是Python语言

Guido van Rossum也不想在Python中使用
reduce

所以现在reduce()。这实际上是我最讨厌的一个,因为除了一些涉及+或*的示例外,几乎每次我看到带有非平凡函数参数的reduce()调用时,我都需要抓起纸笔来绘制实际输入到该函数中的内容,然后才能理解reduce()应该做什么。所以在我看来,reduce()的适用性非常局限于关联运算符,在所有其他情况下,最好显式写出累加循环

没有太多的关联运算符。(这些是(a X b)X c等于a X(b X c)的运算符X。)我认为它仅限于+、*、&、|、^和快捷方式和/或。我们已经有了sum();我很乐意用reduce()交换product(),这样就可以解决两个最常见的用途。[……]


在Python3中,reduce已移动到
functools
模块。

reduce
是执行此操作的最佳方法,但您不必使用lambda;相反,您可以直接使用
*
运算符:

import operator
n *= reduce(operator.mul, terms)
n
现在是240。有关更多信息,请参阅文档。

另一种方式:

import operator
n = reduce(operator.mul, terms, n)

我的想法完全正确,只需再快一分钟!我认为“pythonic”的意思是“把所有东西写在一行”嗯,他添加了
any()
all()
(他在那句话后面的下一段中提出了这一点),但从未添加过
product()
。不管
reduce
的最终命运如何(我在阅读它时从未遇到任何困难),
n*=product(terms)
是非常清楚的。我认为在一个循环或reduce调用或其他调用之间做出决定比把它放在一个命名良好的函数中更重要!我反对这一点。如果你认为人们看不懂你的代码,那就没有好的编写方法。我承认python社区不太喜欢函数式编程,但是reduce非常清晰和简单。就可读性而言,无论如何都不低于for循环。另请参见