python yield yield from

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

相關文章
相關標籤/搜索