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