采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
请问range()函数和生成器有何区别?因为生成器既是可迭代对象又是迭代器,可以直接使用next()取值。但range()要经过iter()获取迭代器。似乎range()不是一次性生成所有数据,这点又和生成器很像。
这没有可比性吧,很显然生成器是一种机制用于各种方式,range只是生成一组界限。
我的疑问是:range(1, 500000000)返回的不是普通的序列,而是返回一个range(1, 500000000)对象。而后者直接构造一个含5亿元素列表会使内存占满而卡死。证明它不是一次性生成所有数据。 通过list(range(1, 500000000))获取列表才会造成卡死。是否说明它是通过计算生成5亿个元素?而不是一次性保存5亿个元素?
def test(): yield 1 yield 2 l = list(test()) print(l) list(xx)是否类似于for in这样不停调用__next__取值,之后放入列表 ?list(range(xx,xx))是否可以认为:因为range()实现了__iter__,只需获取迭代器后在循环里实时计算出值然后放入列表?
肯定是的。list才是一次生成。
登录后可查看更多问答,登录/注册
语法精讲/配套练习+思考题/原生爬虫实战
5.5k 7
2.5k 3
2.1k 4
4.1k 22
2.3k 19