首頁  >  文章  >  後端開發  >  python yield什麼意思

python yield什麼意思

(*-*)浩
(*-*)浩原創
2019-06-27 10:10:5112313瀏覽

閱讀別人的python原始碼時碰到了這個yield這個關鍵字,各種搜尋終於搞懂了,在此做一下總結:

python yield什麼意思

通常的for…in…循環中,in後面是一個數組,這個數組就是一個可迭代對象,類似的還有鍊錶,字串,檔案。它可以是mylist= [1, 2, 3],也可以是mylist = [x*x for x in range(3)]。它的缺陷是所有資料都在記憶體中,如果有海量資料的話將會非常耗記憶體。 (建議學習:Python影片教學

#產生器是可以迭代的,但只可以讀取它一次。因為用的時候才生成。例如 mygenerator = (x*x for x in range(3)),注意這裡用到了(),它就不是數組,而上面的例子是[]。

我所理解的生成器(generator)能夠迭代的關鍵是它有一個next()方法,工作原理就是透過重複呼叫next()方法,直到捕獲一個異常。可以用上面的mygenerator測試。

帶有yield的函數不再是普通函數,而是生成器generator,可用於迭代,工作原理同上。

yield一個類似return的關鍵字,迭代一次遇到yield時就回傳yield後面的值。重點是:下次迭代時,從上一次迭代遇到的yield後面的程式碼開始執行。

簡單理解:yield就是return回傳一個值,並且記住這個回傳的位置,下次迭代就從這個位置後開始。

有yield的函數不只用於for迴圈中,而且可用於某個函數的參數,只要這個函數的參數允許迭代參數。例如array.extend函數,它的原型是array.extend(iterable)。

send(msg)與next()的差別在於send可以傳遞參數給yield表達式,這時傳遞的參數會作為yield表達式的值,而yield的參數是傳回給呼叫者的值。 ——換句話說,就是send可以強行修改上一個yield表達式值。例如函數中有一個yield賦值,a

= yield 5,第一次迭代到這裡會回傳5,a還沒賦值。第二次迭代時,使用.send(10),那麼,就是強行修改a表達式的值為10,本來是None的,那麼a=10

send(msg)與next()都有回傳值,它們的回傳值是當前迭代遇到yield時,yield後面表達式的值,其實就是目前迭代中yield後面的參數。

第一次呼叫時必須先next()或send(None),否則會報錯,send後之所以為None是因為這時候沒有上一個yield(根據第8條)。可以認為,next()等同於send(None)。

更多Python相關技術文章,請造訪Python教學欄位學習!

以上是python yield什麼意思的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn