python3 yield 生成器
阿新 • • 發佈:2019-01-07
在 Python 中,使用了 yield 的函式被稱為生成器(generator)。
跟普通函式不同的是,生成器是一個返回迭代器的函式,只能用於迭代操作,更簡單點理解生成器就是一個迭代器。
在呼叫生成器執行的過程中,每次遇到 yield 時函式會暫停並儲存當前所有的執行資訊,
返回 yield 的值 (有 return 作用), 並在下一次執行 next() 方法 時從當前位置繼續執行。
(ps: 使用了 yield就會自帶next()方法)
呼叫一個生成器函式,返回的是一個迭代器物件。
案例1:
# -*- coding: utf-8 -*- def test1(): var = 1 print(var) yield var print("test1:") test1() print("next():") next(test1())
控制檯列印:
test1:
next():
1
解釋: 在呼叫 test1 方法時,並不會執行裡面的 print(var) 在控制檯列印 ,而是返回一個 生成器
只有 呼叫 test1() 返回的生成器 的 next 方法 如: next(test1()) 才會執行裡面的程式碼
案例2:
# coding=utf-8 def test2(): var = 1 for i in [1,2,3]: var += 1 yield var print("我是yield 之後的:"+str(var)) for i in test2(): print(i)
控制檯列印:
2
我是yield 之後的:2
3
我是yield 之後的:3
4
我是yield 之後的:4
解釋: 使用 for 迴圈 會自動呼叫 test2() 返回的生成器中的 next 方法,從而進行遍歷作用.
每次執行到 yield 返回 var 的值打印出來,儲存當前的所有執行資訊 ,
然後繼續執行 列印 "我是yield 之後的:2"