Both uses a iterator objects, both uses next() call. But the advantage of generator I learnt, we could make it pause with "yield", which is no such such thing for xrange.
xrange在迭代之间会暂停。比较这两行Python 2代码:
>>> a = range(150000000) # takes about 3 seconds and 5 GB on my machine
range
和generator
对象都是iterable对象的示例range
由停止值定义,允许使用可选的起始值和可选的步长。结果是整数的iterable。Arange
还支持其他iTerable不一定支持的操作(如包含)一个
generator
由一个生成器表达式或一个生成器函数定义,这两个表达式中的任何一个都会导致任意值的iterablerange
对象的iterable方面可以由generator
模拟:然后
由于Python2在将近一年前就已经寿终正寝,所以没有太多的理由进入
range
。可以说,在Python中,2range
是一个返回整数列表的函数,而xrange
是一个值表示整数列表的类型。Python3去掉了函数,并重新使用了类型的名称xrange
在迭代之间会暂停。比较这两行Python 2代码:range
实际上是在内存中构建整个列表。您可以通过在输入时看到系统RAM使用率上升来验证这一点xrange
实际上是在迭代之间暂停/让步。如果我们在for循环中迭代b
,它只会在第一次迭代中生成第一个元素(0
),然后在第二次迭代中生成第二个元素(1
),依此类推以下是一种将
xrange
实现为生成器的方法:这里有两个注释:
xrange
xrange
不是technically implemented as a generator,但行为类似相关问题 更多 >
编程相关推荐