AoboSir 博客

与15年前的我比,我现在是大人;与15年后的我比,我现在还是个婴儿

Learning Python 018 Python2 和 Python3 中 Range()函数的使用


  • 使用的电脑系统:Windows 10 64位
  • 使用的开发集成环境:PyCharm 2016.1.4
  • 使用的Python的版本:python 2.7.10 和 python 3.5.0

range() 函数

  • Python2中:用来创建一个列表(list)。
  • Python3中:用来创建一个可以生成list或者tuple的生成器。

Python2 range()函数 知识点

Python2 中的range() 函数可以生成一个list。(分配内存空间)

1
2
3
4
a = range(10)
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b = range(4,10)
# [4, 5, 6, 7, 8, 9]

Python2 中的xrange()函数不是生成一个list,而是生成一个生成器,不分配内存。

1
2
3
4
5
6
a = xrange(10)
# xrange(10)
b = list(xrange(10))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
c = tuple(xrange(10))
# (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)

Python3 range()函数 知识点


1
2
a = range(10)
# range(0, 10)

输出:(打印出来的不是一个列表,而是一个生成器)。

Python3 选择这样做的原因:可以节约内存空间,详情请参考这篇博客:Python2和Python3的内存释放

Python3中的range()函数的功能和Python2中的xrange()函数一样,所以在Python3中没有xrange()函数。


要想生成list或者tuple,这样做:

1
2
3
4
5
6
7
8
9
a = list(range(10))
# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
b = list(range(4,10))
# [4, 5, 6, 7, 8, 9]

a = tuple(range(10))
# (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
b = tuple(range(4,10))
# (4, 5, 6, 7, 8, 9)

range()函数的使用

下面这段代码在Python2 和 Python3中得到的运行结果都是一样的。

1
2
for i in range(10):
    print(i)

输出:

1
2
3
4
5
6
7
8
9
10
0
1
2
3
4
5
6
7
8
9

运行结果是一样的,但是运行的原理不同:

  • Python2:在第一次执行 range(10),就生成了一个[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]列表。
  • Python3:在每次执行range(10)时,生成一个元素i

Comments