亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Python > 正文

Python 深入理解yield

2020-01-04 19:29:14
字體:
來源:轉載
供稿:網友
只是粗略的知道yield可以用來為一個函數返回值塞數據,比如下面的例子:
取出alist的每一項,然后把i + 1塞進去。然后通過調用取出每一項:
這的確是yield應用的一個例子,但是,看過limodou的文章《2.5版yield之學習心得》,并自己反復體驗后,對yield有了一個全新的理解。
1. 包含yield的函數假如你看到某個函數包含了yield,這意味著這個函數已經是一個Generator,它的執行會和其他普通的函數有很多不同。比如下面的簡單的函數:
可以看到,調用h()之后,print 語句并沒有執行!這就是yield,那么,如何讓print 語句執行呢?這就是后面要討論的問題,通過后面的討論和學習,就會明白yield的工作原理了。
2. yield是一個表達式Python2.5以前,yield是一個語句,但現在2.5中,yield是一個表達式(Expression),比如:
表達式(yield 5)的返回值將賦值給m,所以,認為 m = 5 是錯誤的。那么如何獲取(yield 5)的返回值呢?需要用到后面要介紹的send(msg)方法。
3. 透過next()語句看原理現在,我們來揭曉yield的工作原理。我們知道,我們上面的h()被調用后并沒有執行,因為它有yield表達式,因此,我們通過next()語句讓它執行。next()語句將恢復Generator執行,并直到下一個yield表達式處。比如:
c.next()調用后,h()開始執行,直到遇到yield 5,因此輸出結果:
Wen Chuan
當我們再次調用c.next()時,會繼續執行,直到找到下一個yield表達式。由于后面沒有yield了,因此會拋出異常:
4. send(msg) 與 next()了解了next()如何讓包含yield的函數執行后,我們再來看另外一個非常重要的函數send(msg)。其實next()和send()在一定意義上作用是相似的,區別是send()可以傳遞yield表達式的值進去,而next()不能傳遞特定的值,只能傳遞None進去。因此,我們可以看做
c.next() 和 c.send(None) 作用是一樣的。
來看這個例子:
輸出的結果為:
Wen Chuan Fighting!
需要提醒的是,第一次調用時,請使用next()語句或是send(None),不能使用send發送一個非None的值,否則會出錯的,因為沒有yield語句來接收這個值。
5. send(msg) 與 next()的返回值send(msg) 和 next()是有返回值的,它們的返回值很特殊,返回的是下一個yield表達式的參數。比如yield 5,則返回 5 。到這里,是不是明白了一些什么東西?本文第一個例子中,通過for i in alist 遍歷 Generator,其實是每次都調用了alist.Next(),而每次alist.Next()的返回值正是yield的參數,即我們開始認為被壓進去的東東。我們再延續上面的例子:
輸出結果:
Wen Chuan Fighting!
We will never forget the date 5 . 12
6. throw() 與 close()中斷 Generator中斷Generator是一個非常靈活的技巧,可以通過throw拋出一個GeneratorExit異常來終止Generator。Close()方法作用是一樣的,其實內部它是調用了throw(GeneratorExit)的。我們看:
因此,當我們調用了close()方法后,再調用next()或是send(msg)的話會拋出一個異常:

注:以上觀點屬于本人的個人理解,如有偏差請批評指正。謝謝!
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美精品久久久久久久| 日韩精品免费综合视频在线播放| 这里只有精品丝袜| 亚洲精品福利在线观看| 日韩欧美在线视频| 成人h视频在线| 国产精品青草久久久久福利99| 久久欧美在线电影| 4444欧美成人kkkk| 久久久久久免费精品| 动漫精品一区二区| 精品日本高清在线播放| 欧美亚洲国产成人精品| 国产精品久久久久久久午夜| 日韩国产高清污视频在线观看| 国内精品国产三级国产在线专| 亚洲午夜精品久久久久久久久久久久| 91高清在线免费观看| 国产成人av在线播放| 成人免费视频97| 久久久免费电影| xxxxx91麻豆| 国产一区二区精品丝袜| 国产精品91久久久| 日韩电影中文字幕av| 国产一区二中文字幕在线看| 欧美日韩加勒比精品一区| 久久久久国产一区二区三区| 国产极品jizzhd欧美| 国内精品视频久久| 欧美视频裸体精品| 浅井舞香一区二区| 亚洲欧美成人一区二区在线电影| 亚洲精品美女在线观看播放| 国产精品第一视频| 日韩精品视频免费在线观看| 国产高清视频一区三区| 精品久久国产精品| 精品久久久久久久久久久久| 色樱桃影院亚洲精品影院| 国产成人一区二区| 日韩av成人在线| 亚洲free性xxxx护士白浆| 国语自产偷拍精品视频偷| 亚洲第一免费播放区| 91日韩在线视频| 日韩在线视频播放| 亚洲少妇激情视频| 国产噜噜噜噜久久久久久久久| 亚洲国产精彩中文乱码av| 国语自产精品视频在线看| 亚洲性日韩精品一区二区| 久久6免费高清热精品| 91福利视频在线观看| 日韩电影免费在线观看中文字幕| 久久不射电影网| 91嫩草在线视频| 亚洲摸下面视频| 国产成人精品久久二区二区| 欧美激情第1页| 国产区亚洲区欧美区| 精品成人在线视频| 九九热这里只有精品6| 国产精品极品在线| 69**夜色精品国产69乱| 亚洲aⅴ日韩av电影在线观看| 亚洲成人久久一区| 麻豆精品精华液| 亚洲美女精品成人在线视频| 欧美另类在线观看| 精品久久久久久久久国产字幕| 日本一区二三区好的精华液| 国产成人精品视频在线| 亚洲一区二区三区四区视频| 午夜精品一区二区三区在线播放| 秋霞成人午夜鲁丝一区二区三区| 在线精品高清中文字幕| 亚洲一区二区自拍| 综合网中文字幕| 色狠狠av一区二区三区香蕉蜜桃| 精品国产福利在线| 亚洲91精品在线观看| 久久99热精品这里久久精品| 欧美一区二区三区精品电影| 国产日韩欧美自拍| 欧美大码xxxx| 成人免费看黄网站| 播播国产欧美激情| 亚洲最大中文字幕| 久久综合亚洲社区| 一本大道亚洲视频| 国产精品视频不卡| 另类专区欧美制服同性| 精品一区精品二区| y97精品国产97久久久久久| 亚洲男人av电影| 日韩精品视频在线| 欧美又大又粗又长| 欧美一级在线播放| xxxxxxxxx欧美| 久久免费视频在线| 欧美午夜精品久久久久久久| 亚洲第一av在线| 久久97久久97精品免视看| 久久久久五月天| 久久久久久有精品国产| 欧美精品亚州精品| 亚洲精品91美女久久久久久久| 欧美老女人xx| 午夜精品久久久久久久久久久久| 91精品中文在线| 亚洲国产精品99| 深夜福利亚洲导航| 欧美大奶子在线| 一区二区三区回区在观看免费视频| 精品在线欧美视频| 亚洲自拍在线观看| 91理论片午午论夜理片久久| 深夜福利日韩在线看| 欧美一级片久久久久久久| 久久久久国产精品免费| 亚洲精品www| 九九九久久国产免费| 中文字幕日本精品| 色香阁99久久精品久久久| 一级做a爰片久久毛片美女图片| 久久久久久国产精品| 成人在线视频网站| 国产成+人+综合+亚洲欧洲| 欧亚精品在线观看| 国产精品免费观看在线| 国产精品电影网站| 欧美国产日韩一区| 欧美香蕉大胸在线视频观看| 欧美成人午夜视频| 精品亚洲一区二区三区四区五区| 日韩欧美成人精品| 中文字幕av一区中文字幕天堂| 亚洲影院高清在线| 国产成人精品在线| 久久久久久九九九| 国产精品色午夜在线观看| 95av在线视频| 亚洲最大的网站| 亚洲精品久久久久久久久久久| 91精品久久久久久久久久久| 国内偷自视频区视频综合| 亚洲va欧美va在线观看| 91精品国产高清久久久久久久久| 久久久噜久噜久久综合| 精品电影在线观看| 日韩av在线不卡| 国产视频精品在线| 4438全国亚洲精品在线观看视频| 亚洲男人天堂久| 成人黄色免费片| 美女国内精品自产拍在线播放| 青草青草久热精品视频在线观看| 国产精品久久av| 国产成人精品av| 精品久久久久人成| 国产美女久久精品| 欧美成人免费一级人片100| 国产成人综合亚洲|