1. 程式人生 > >python3 yield 生成器

python3 yield 生成器

在 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"