python 21 生成器又是什麼東西?

2021-10-09 13:02:37 字數 2808 閱讀 3651

生成器,只要含有yield關鍵字的函式都是生成器函式,但yield不能和return共用且需要寫在函式內。

生成器,是返回乙個迭代器的函式,說白了生成器也是迭代器。

1、只要含有yield關鍵字的函式都是生成器函式。

def generator():

print(1)

yield 'a'

ret = generator() #生成器函式 : 執行之後會得到乙個生成器作為返回值

2、每 yield 一次會保留當前所有的執行資訊,返回對應的 yield 值,也相當於可乙個乙個取值了(和迭代器差不多)

# 也是可乙個乙個取值,yield 一次就取一次

def generator():

yield 'a'

yield 'b'

yield 'c'

g = generator() # 得到生成器作為返回值

3、好比如:前面的例子,我要50個數字,你一下子 list 給我全放記憶體裡占用就會比另 range(0,50)的多。

50個數字可能還好,當你不是這種型別資料的時候我擔心會不會把記憶體搞爆?所以生成器是個好東西。

# 對比一下

print(range(50))

print(list(range(50)))

控制台輸出:

4、例項:

200萬個數字中任意取值,但不可能一下子放200萬個數字到記憶體裡。(其實也可以的,你試試吧!)

# 來 200萬 個數字

def func():

for i in range(2000000):

yield '200萬個數字:%s' % i

g = func()

# 取50個

count = 0

for i in g:

count += 1

if count > 50:

break

print(i)

# 我只喜歡第100個

for i in g:

count += 1

if count > 100:

print('我只喜歡:', i)

yield from (a, b):第一次返回值a,第二次返回值b

# send 獲取基本和 next 方法一致

# 使用send注意事項:

# 第一次 yield 必須用 next

# 最後乙個 yield 不能接受外部的值,既不能用 send

python 21 生成器又是什麼東西?

生成器,只要含有yield關鍵字的函式都是生成器函式,但yield不能和return共用且需要寫在函式內。生成器,是返回乙個迭代器的函式,說白了生成器也是迭代器。1 只要含有yield關鍵字的函式都是生成器函式。def generator print 1 yield a ret generator ...

python3生成器 Python3 生成器

python3 生成器 閱讀 125 發布於 2020 05 19 14 29 25 在python中,一邊迴圈一邊計算出元素的機制,稱為生成器 generator。生成器的優點 一次返回乙個結果,延遲計算。這對於大資料量處理,是個非常有用的優勢。占用記憶體量是工程師必須考慮的乙個問題。提高 可讀性...

Python(九)生成器

該系列文章用來記錄一下自己在b站學習python時,進行上機練習用的 使用 pycharm 2020.3.3 慕課 python語言基礎與應用 北京大學 陳斌 字幕校對 編寫程式,輸入兩個數,輸出它們的商,採用例外處理來處理兩種錯誤,給出使用者友好的提示資訊 1 除數為0 2 輸入了非數值 try ...