1.可迭代对象html
具有可迭代的能力,即enumerable,在python中指的是能够经过for-in去逐个访问元素的一些对象,好比元组tuple,列表list,字符串string,文件对象file等。python
2.迭代器编程
经过另外一种方式一个一个访问可迭代对象中的元素,enumerator。在python中指的是给内置函数iter()传递一个可迭代对象做为参数,返回的那个对象就是迭代器,经过迭代器的next()方法逐个去访问。多线程
3.生成器app
生成器的本质是一个逐个返回元素的函数,本质是个函数。函数
最大的好处在于它是“延迟加载”,即对于处理长序列问题,更加的节省存储空间。即生成器每次在内存中只存储一个值,好比打印一个斐波拉切数列:原始的方法能够以下所示ui
def fab(max): n, a, b = 0, 0, 1 L = [] while n < max: L.append(b) a, b = b, a + b n = n + 1 return L 这样作最大的问题在于将全部的元素都存储在了L里面,很占用内存,而使用生成器则以下所示 def fab(max): n, a, b = 0, 0, 1 while n < max: yield b #每次迭代时值加载这一个元素,并且替换掉以前的那一个元素,这样就大大节省了内存。并且程序在碰见yield语句时会停下来,这是后面使用yield阻断原理进行多线程编程的一个启发,(python协程编程会在后面讲到) a, b = b, a + b n = n + 1 生成器其实就是下面这个样子,写得简单一些就是一次返回一条,以下: def generator(): for i in range(5): yield i def generator_1(): yield 1 yield 2 yield 3 yield 4 yield 5
4. yield fromspa
yield from generator 。实际上就是返回另一个生成器线程
def generator1(): item = range(10) for i in item: yield i def generator2(): yield ‘a‘ yield ‘b‘ yield ‘c‘ yield from generator1() #yield from iterable本质上等于 for item in iterable: yield item的缩写版 yield from [11,22,33,44] yield from (12,23,34) yield from range(3) for i in generator2() : print(i)
从上面的代码能够看书,yield from 后面能够跟的式子有“ 生成器 元组 列表等可迭代对象以及range()函数产生的序列”协程
上面代码运行的结果为:
a
b
c
0
1
2
3
4
5
6
7
8
9
11
22
33
44
12
23
34
0
1
2
原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/9248641.html