Python yield生成器 函式

2021-09-30 00:09:06 字數 1577 閱讀 3428

>>> def count_num():

... yield 1

... yield 2

... yield 3

... yield 4

... return

... num=count_num()

## 呼叫next()依次向下取值,yield類似return,中斷流程,記錄返回當前的值,

#一直往下執行,直到執行生成器函式中的return觸發生成器物件丟擲stopiteration異常,

# 再往下取值就為空了。

>>> next(num)

1>>> next(num)

2>>> next(num)

3>>> next(num)

4>>> next(num)

traceback (most recent call last):

file "", line 1, in stopiteration

def output_ab():

print("start flag")

yield "a"

print("continue flag")

yield "b"

print("end")

output=output_ab()

print(next(output))

start flag

aprint(next(output))

continue flag

bprint(next(output))

endtraceback (most recent call last):

file "", line 1, in stopiteration

def output_num():

for r in range(6):

yield r

num=output_num()

print(next(num))

0print(next(num))

1print(next(num))

2print(next(num))

3print(next(num))

4print(next(num))

5print(next(num))

traceback (most recent call last):

file "", line 1, in stopiteration

#生成器表示式

new_num=(x*x for x in output_num())

print(next(new_num))

0print(next(new_num))

1print(next(new_num))

4print(next(new_num))

9print(next(new_num))

16print(next(new_num))

25print(next(new_num))

traceback (most recent call last):

file "", line 1, in stopiteration

python yield建立生成器

利用迭代器,我們可以在每次迭代獲取資料 通過next 方法 時按照特定的規律進行生成。但是我們在實現乙個迭代器時,關於當前迭代到的狀態需要我們自己記錄,進而才能根據當前狀態生成下乙個資料。為了達到記錄當前狀態,並配合next 函式進行迭代使用,我們可以採用更簡便的語法,即生成器 generator ...

python yield 生成器用法

總結 可以把send 看成是next 的公升級版。send 不僅能像next 一樣觸發生成器的乙個迭代,還能傳入乙個值給yield語句。看下面乙個列子 def func y 1 while true x yield y y 1 print 接收了x format x f func f是乙個初始化好的...

python yield 生成器 的作用

編譯器 中最初級的模組是進行詞法分析,將源 轉化成 token流。可以 一次性將所有 字元轉換成token list 之後再處理 也可以每次獲取乙個 token,處理之後,接著再獲取下乙個token,即邊分析邊處理,這就需要token函式 記錄 當前分析的 狀態,一種是將狀態 由外部呼叫者 傳入,一...