Python3中 yield 關鍵字用法


今天在看Python書籍的時候,有段代碼中用到了 yield 關鍵字,不知道作什么用,不甚理解。查了些資料,覺得 yield 挺好用的,給大家分享下:

 

在Python3中任何使用到 yield 的函數稱為生成器,如:

def count(n):
    while n > 0:
        yield n  # 生成值: n
        n -= 1

另外一種說法:生成器就是一個返回迭代器的函數,與普通函數的區別是生成器包含yield語句,更簡單點理解生成器就是一個迭代器。

使用yield,可以讓函數生成一個序列,該函數返回的對象類型是"generator",通過該對象連續調用__next__()方法返回序列值。

def count(n):
    while n > 0:
        yield n  # 生成值: n
        n -= 1


c = count(5) 
print(c.__next__())  # 輸出:5
print(c.__next__())  # 輸出:4

生成器函數只有在調用__next()__方法的時候才開始執行函數里面的語句,比如:增加打印輸出

def count(n):
    print("bgn...")
    while n > 0:
        yield n  # 生成值: n
        n -= 1

在調用count函數時:c=count(5),並不會打印"bgn..."。只有等到調用c.__next__()時才真正執行里面的語句。每次調用__next__()方法時,count函數會運行到語句yield n處為止,__next__()的返回值就是生成值n,再次調用__next__()方法時,函數繼續執行yield之后的語句。

從上面輸出可以看出,調用了2次 c.__next__,“bgn...”只輸出一次,“end...”沒有輸出。“end...”只有在迭代器的值都迭代完成才會輸出。如果一直調用__next__方法,當執行到沒有可迭代的值后,程序就會報錯:

Traceback (most recent call last):

所以一般不會手動的調用__next__方法,而使用for循環,完整代碼如下:

def count(n):
    print("bgn...")
    while n > 0:
        yield n  # 生成值: n
        n -= 1
    print("end...")


for i in count(5):
    print(i)

輸出如下:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM