![0f70b3d9459b96c9e8c07e6e86f65559.png](https://i-blog.csdnimg.cn/blog_migrate/0fa653630255681dcf53931efc5fefe3.jpeg)
range 和xrange的详细区别
首先我们来看一下,range函数的用法:
语法:
range(stop)
range(start, stop[, step])
range函数具有一些特性:
(1)如果step参数缺省,默认1;如果start参数缺省,默认0。
(2)如果step是正整数,则最后一个元素(start + i * step)小于stop。
(3)如果step是负整数,则最后一个元素(start + i * step)大于stop。
(4)step参数必须是非零整数,否则抛出VauleError异常。
例:
>>> range(1,5) #代表从1到5(不包含5) [1, 2, 3, 4] >>> range(1,5,2) #代表从1到5,间隔2(不包含5) [1, 3] >>> range(5) #代表从0到5(不包含5) [0, 1, 2, 3, 4] |
注意:range函数返回一个左闭右开([left,right))的序列数
xrange的用法
函数说明:用法与range完全相同,所不同的是生成的不是一个数组,而是一个生成器
例如:
>>> xrange(5) xrange(5) >>> xrange(1,5) xrange(1, 5) >>>list(xrange(1,5))[1, 2, 3, 4] >>>xrange(0,6,2) xrange(0, 6, 2) >>>list(xrange(0,6,2)) [0, 2, 4] |
由上面的示例可以知道:要生成很大的数字序列的时候,用xrange会比range性能优很多,因为需要一上来就开辟一块很大的内存空间,这两个基本上都是在循环的时候用:
for i in range(0,10):
print(i)
for j in xrange(0, 10):
print(j)这两个输出的结果都是一样的,实际上有很多不同,range会直接生成一个list对象值得注意的是:python3 取消了 xrange() 函数,并且和 range() 函数合并为 range()。当调用 xrange() 的时候,python3 环境提示 xrange 没有被定义。
![3e58ffd1dacf548030191966f5941121.png](https://i-blog.csdnimg.cn/blog_migrate/1b5d30b40e30aec646e897f0f3d5b7eb.jpeg)
![1850ef3670f4307e6a256dfd36d8a50a.png](https://i-blog.csdnimg.cn/blog_migrate/8c067cd145198284e3bc16f46046db82.jpeg)
而 range() 函数的类型也发生了变化,在 2.7 里面的时候,是 list 类型,但是在 3.7 里面,range() 函数是range 类型。