secce 发表于 2018-8-13 08:01:41

Python xrange与range的区别

  转载自:现代魔法学院
  原文地址:http://www.nowamagic.net/academy/detail/1302446
  range 前面小节已经说明了,range( stop[, step]),根据start与stop指定的范围以及step设定的步长,生成一个序列。
  比如:
>>> range(5)  

  
>>> range(1,5)
  

  
>>> range(0,6,2)
  

  xrange 用法与 range 完全相同,所不同的是生成的不是一个list对象,而是一个生成器。
>>> xrange(5)  
xrange(5)
  
>>> list(xrange(5))
  

  
>>> xrange(1,5)
  
xrange(1, 5)
  
>>> list(xrange(1,5))
  

  
>>> xrange(0,6,2)
  
xrange(0, 6, 2)
  
>>> list(xrange(0,6,2))
  

  由上面的示例可以知道:要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。
  xrange 和 range 这两个基本上都是在循环的时候用。
>>> xrange(5)  
xrange(5)
  
>>> list(xrange(5))
  

  
>>> xrange(1,5)
  
xrange(1, 5)
  
>>> list(xrange(1,5))
  

  
>>> xrange(0,6,2)
  
xrange(0, 6, 2)
  
>>> list(xrange(0,6,2))
  

  由上面的示例可以知道:要生成很大的数字序列的时候,用xrange会比range性能优很多,因为不需要一上来就开辟一块很大的内存空间。
  xrange 和 range 这两个基本上都是在循环的时候用。
for i in range(0, 100):  
    print i
  

  
for i in xrange(0, 100):
  
    print i
  这两个输出的结果都是一样的,实际上有很多不同,range会直接生成一个list对象:
a = range(0,100)  
print type(a)
  
print a
  
print a, a
  输出结果:
<type 'list'>  

  
0 1
  而xrange则不会直接生成一个list,而是每次调用返回其中的一个值:
a = xrange(0,100)  
print type(a)
  
print a
  
print a, a
  输出结果:
<type 'xrange'>  
xrange(100)
  
0 1
  所以xrange做循环的性能比range好,尤其是返回很大的时候。尽量用xrange吧,除非你是要返回一个列表。
页: [1]
查看完整版本: Python xrange与range的区别