首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >函数论证中的表达理解

函数论证中的表达理解
EN

Stack Overflow用户
提问于 2019-10-25 09:21:51
回答 2查看 167关注 0票数 0

为什么这段代码

代码语言:javascript
复制
sum(x for x in range(10))

有效吗?为什么没有必要将x for x in range(10)封装在方括号中?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-10-25 09:46:38

我认为这一点在评论中已经说过了,但是对于后代:(Python3.8.0)文档的第6.2.8节声明,“只有一个参数的调用可以省略括号。详细信息请参阅呼叫节。”

编辑:为了完整起见,“调用”部分接着说,调用的实际参数可以是逗号分隔的参数列表,也可以是单个comprehension,它是没有括号的x for x in ...内容。

票数 3
EN

Stack Overflow用户

发布于 2019-10-25 09:31:06

它创建一个生成器表达式。

代码语言:javascript
复制
>>> 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将在生成每个值时立即得到它。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58555680

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档