最簡單明瞭的yield from解釋

2022-08-24 02:18:13 字數 1722 閱讀 7491

def

one():

print('

one start')

res = yield

from

two()

print('

function get res:

', res)

return

'one

' +res

deftwo():

print('

two start')

res = yield

from

three()

print("

>>> two1")

return

resdef

three():

print("

>>> three1")

yield 1

print("

>>> three2")

return

'three'if

__name__ == '

__main__':

gen =one()

print("

>>> 1")

send_1 =gen.send(none)

print("

>>> 2")

print

(send_1)

print("

>>> 3")

send_2 =gen.send(none)

print("

>>> 4")

print

(send_2)

print("

>>> 5

")

執行結果:

>>> 1one start

two start

>>>three1

>>> 2

1>>> 3

>>>three2

>>>two1

function get res: three

traceback (most recent call last):

file

"c:/users/administrator/desktop/1.py

", line 29, in

send_2 =gen.send(none)

stopiteration: onethree

>>>

不要把yield from 想的太複雜,就把yield from呼叫看作是普通函式呼叫來看**。一旦遇到yield會返回。再次send,特點和生成器一樣。

1、當send裡面的函式先遇到的是yield from語句,那麼會繼續往下呼叫,直到遇到yield會暫停並返回給呼叫方。

main->one()->two()->three->遇到yield- >main

2、遇到yield語句,會直接返回到send語句所在函式, 也就是send_1 = gen.send(none),send_1 賦值為 three()中的 yield 1

3、再次呼叫send語句,就會變成1的反向呼叫,從yield暫停的地方 three() 函式的 yield 1下面開始執行

three()->two()->one->main

4、yield from後面的函式返回值會得到,賦值給左值

three()的返回值會給two()的res,two()的返回值會給one()

**至 

插入排序(簡單明瞭)

class test public static void insertsort int a int m 1 從陣列的第二個位置開始遍歷值 for j 1 j 0 a i key 跳出迴圈 找到要插入的中間位置或已遍歷到0下標 system.out.println system.out.print ...

初識 Inject 註解 簡單明瞭

inject 註解可以出現在三種類成員之前,表示該成員需要注入依賴項。按執行時的處理順序這三種成員型別是 1 構造方法 2 方法 3 屬性 在構造方法上使用 inject 時,其引數在執行時由配置好的ioc容器提供。比如,在下面的 中,執行時呼叫murmurmessage類的構造方法時,ioc 容器...

簡單明瞭的SQL建立語句

1.建立資料庫sql語句 use master goif exists select from sysdatabases where name commonpermission begin select 該資料庫已存在 drop database commonpermission 如果該資料庫已經存...