鱼C论坛

 找回密码
 立即注册
查看: 1321|回复: 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,而不会像第一个代码那样求和


小甲鱼最新课程 -> https://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,而不会像第一个代码那样求和


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

看两种运行情况的代码吧:

  1. >>> x = (i for i in range(100) if i % 2)
  2. >>> print(x)
  3. <generator object <genexpr> at 0x000002625A7EBE40>

  4. >>> print(sum(i for i in range(100) if i % 2))
  5. 2500
复制代码


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

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

小甲鱼最新课程 -> https://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 原有功能(求和)就会丧失,变为一个生成器
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-7-26 20:42:09 | 显示全部楼层
谢谢,你说的很清楚,明白了!再次谢谢你!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-24 08:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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