我的教授和this guy都声称range
创建了一个值列表。
"Note: The range function simply returns a list containing the numbers from x to y-1. For example, range(5, 10) returns the list [5, 6, 7, 8, 9]."
我认为这是不准确的,因为:
type(range(5, 10))
<class 'range'>
此外,访问由range
创建的整数的唯一明显方法是遍历它们,这使我认为将range
标记为列表是不正确的。
视情况而定。
在python-2.x中,
range
实际上创建了一个列表(这也是一个序列),而xrange
创建了一个xrange
对象,可用于遍历这些值。另一方面,在python-3.x中,
range
创建一个iterable(或者更具体地说,一个序列)在Python 2.x中,^{} 返回一个列表,而在Python 3.x中,^{} 返回一个类型为^{} 的不可变序列。
Python2.x:
Python3.x:
在Python2.x中,如果您想要获得一个iterable对象,比如在Python3.x中,您可以使用^{} 函数,它返回一个类型为^{} 的不可变序列。
Python 2.x中
xrange
比range
的优势:注意:
没有。由于Python 3中的
range
对象是不可变的序列,因此它们也支持索引。引用range
函数文档例如
所有这些都有可能通过不可变的
range
序列实现。最近,我遇到了一个问题,我认为应该把它包括在这里。考虑一下这个Python 3.x代码
人们会期望这个代码以列表的形式每十个数字打印一次,直到99。但是,它将无限地运行。你能解释为什么吗?
解决方案
如果使用的python版本是2.x,则range会创建一个列表。 在这个场景中,只有当它的引用不止一次时,才使用范围,否则使用xrange,xrange通过redusing内存使用量来创建一个生成器,有时还使用time as lazy方法。
在python 3.x中没有x range,而是range代表python 2.x的xrange
参考问题 What is the difference between range and xrange functions in Python 2.X?
相关问题 更多 >
编程相关推荐