请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

range()函数和生成器的区别。

请问range()函数和生成器有何区别?因为生成器既是可迭代对象又是迭代器,可以直接使用next()取值。但range()要经过iter()获取迭代器。似乎range()不是一次性生成所有数据,这点又和生成器很像。图片描述

正在回答 回答被采纳积分+3

1回答

7七月 2018-11-08 04:29:09

这没有可比性吧,很显然生成器是一种机制用于各种方式,range只是生成一组界限。

0 回复 有任何疑惑可以回复我~
  • 提问者 时间流逝unity #1
    我的疑问是:range(1, 500000000)返回的不是普通的序列,而是返回一个range(1, 500000000)对象。而后者直接构造一个含5亿元素列表会使内存占满而卡死。证明它不是一次性生成所有数据。
    通过list(range(1, 500000000))获取列表才会造成卡死。是否说明它是通过计算生成5亿个元素?而不是一次性保存5亿个元素?
    回复 有任何疑惑可以回复我~ 2018-11-08 14:59:48
  • 提问者 时间流逝unity #2
    def test():
        yield 1
        yield 2
    l = list(test())
    print(l)
    list(xx)是否类似于for in这样不停调用__next__取值,之后放入列表 ?list(range(xx,xx))是否可以认为:因为range()实现了__iter__,只需获取迭代器后在循环里实时计算出值然后放入列表?
    回复 有任何疑惑可以回复我~ 2018-11-08 15:16:32
  • 7七月 回复 提问者 时间流逝unity #3
    肯定是的。list才是一次生成。
    回复 有任何疑惑可以回复我~ 2018-11-09 03:12:47
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信