Fork me on GitHub

Python系列文章-迭代器与生成器总结

目录

  • 背景

  • 第一部分 变量说明

  • 第二部分 总结

  • 参考文献及资料

背景

通常使用Python语言时,我们实现遍历的需求场景的时候,会经常使用range和xrange。

https://zhuanlan.zhihu.com/p/34157478

第一部分 rangexrange

由于Py3Py2已有变化,所以分两个环境看:

1.1 Python 2.x

直接看案例:

1
2
3
4
5
for i in range(5):
print i
print type(range(5))
# <class 'range'>
<type 'list'>

发现在range(5)返回就是一个list类型。

1
2
3
4
for i in xrange(5):
print i
print type(xrange(5))
<type 'xrange'>

xrange返回的是一个生成器对象(xrange object)。xrange()不会直接生成一个list,而是每次调用返回其中的一个值,内存空间使用极少。例如下面的代码:

1
2
3
4
5
6
import sys

sys.getsizeof(range(100))
# 872
sys.getsizeof(xrange(100))
# 40

1.1 Python 3.x

python3 中没有xrange,只有range。其实应该是:python3range就是xrange

1
2
3
4
5
for i in range(5):
print(i)

print(range(5))
# <class 'range'>

这里也是生成器对象。

第二部分

在 Python 3 中,enumerate、zip、reversed和其他一些内置函数会返回迭代器:

参考文献及资料

1、变量官网介绍:

0%