为什么这段代码
sum(x for x in range(10))有效吗?为什么没有必要将x for x in range(10)封装在方括号中?
发布于 2019-10-25 09:46:38
发布于 2019-10-25 09:31:06
它创建一个生成器表达式。
>>> nums = (x for x in range(4))
>>> nums
<generator object <genexpr> at 0x000001E52747B2B0>
>>> next(nums)
0
>>> next(nums)
1
>>> next(nums)
2
>>> next(nums)
3
>>> next(nums)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
StopIteration什么是发电机?除非被要求执行,否则它基本上不会执行。列表理解将首先创建一个list,然后将该list传递给sum函数。
去掉方括号使其成为一个生成器,它将每个生成的值发送到sum,而不显式地创建列表。sum将继续向genexpr询问数字,并在StopIteration被启动时停止。这比使用列表理解更快。
如果序列很长,并且使用sum函数理解列表,python将首先花费时间生成整个列表,然后sum将再次计算所有元素的和。使用带有sum的生成器表达式将减少大量的执行时间,因为sum将在生成每个值时立即得到它。
https://stackoverflow.com/questions/58555680
复制相似问题