鱼C论坛

 找回密码
 立即注册
查看: 1142|回复: 4

[已解决]python生成器求助

[复制链接]
发表于 2020-7-26 00:05:42 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
请问一下大家,以下两句话有什么去区别?带等号与不带等号的区别在哪里?谢谢大家!

第一句:sum(i for i in range(100) if i % 2)

第二句:sum = (i for i in range(100) if i % 2)
最佳答案
2020-7-26 08:08:08


第一句:sum(i for i in range(100) if i % 2)


Python 有 sum 这么一个内置函数,用于计算容器内元素总和,返回最终和的结果

所以你这第一个代码是用 sum 函数来计算  (i for i in range(100) if i % 2)这个生成器所能生成的数的总和

第二句:sum = (i for i in range(100) if i % 2)


而你第二个是变量的赋值操作,变量名为 sum ,这个只是将 (i for i in range(100) if i % 2) 生成器赋值给 sum

实际上就是给这个生成器 (i for i in range(100) if i % 2) 取了个外号叫 sum,而不会像第一个代码那样求和


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-7-26 08:08:08 | 显示全部楼层    本楼为最佳答案   


第一句:sum(i for i in range(100) if i % 2)


Python 有 sum 这么一个内置函数,用于计算容器内元素总和,返回最终和的结果

所以你这第一个代码是用 sum 函数来计算  (i for i in range(100) if i % 2)这个生成器所能生成的数的总和

第二句:sum = (i for i in range(100) if i % 2)


而你第二个是变量的赋值操作,变量名为 sum ,这个只是将 (i for i in range(100) if i % 2) 生成器赋值给 sum

实际上就是给这个生成器 (i for i in range(100) if i % 2) 取了个外号叫 sum,而不会像第一个代码那样求和


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-26 08:13:53 | 显示全部楼层

这也提醒,不要用 Python 内置函数作为变量名,否则原有的函数功能将会被覆盖

看两种运行情况的代码吧:
>>> x = (i for i in range(100) if i % 2)
>>> print(x)
<generator object <genexpr> at 0x000002625A7EBE40>

>>> print(sum(i for i in range(100) if i % 2))
2500

x 还是一个生成器,此时你可以继续通过 next() 函数来取出值

而 使用 sum 函数后直接算出生成器中所有数的总和了

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-7-26 08:51:54 | 显示全部楼层
第一句 sum(i for i in range(100) if i % 2) 是调用 sum() BIF,对生成器中所有元素求和。

第二句 sum = (i for i in range(100) if i % 2) 是将变量 sum 赋值给一个生成器,此时的 sum 原有功能(求和)就会丧失,变为一个生成器
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-26 20:42:09 | 显示全部楼层
谢谢,你说的很清楚,明白了!再次谢谢你!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-19 17:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表