python生成器求助
请问一下大家,以下两句话有什么去区别?带等号与不带等号的区别在哪里?谢谢大家!第一句: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)
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,而不会像第一个代码那样求和
这也提醒,不要用 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 函数后直接算出生成器中所有数的总和了
第一句 sum(i for i in range(100) if i % 2) 是调用 sum() BIF,对生成器中所有元素求和。
第二句 sum = (i for i in range(100) if i % 2) 是将变量 sum 赋值给一个生成器,此时的 sum 原有功能(求和)就会丧失,变为一个生成器 谢谢,你说的很清楚,明白了!再次谢谢你!
页:
[1]