卖逼视频免费看片|狼人就干网中文字慕|成人av影院导航|人妻少妇精品无码专区二区妖婧|亚洲丝袜视频玖玖|一区二区免费中文|日本高清无码一区|国产91无码小说|国产黄片子视频91sese日韩|免费高清无码成人网站入口

YIOS是什么?

YIOS是什么?yield是生成器中的特有用法,而生成器是一種可以封閉整個運行狀態(tài)、可以隨時暫停繼續(xù)的模型,從傳統(tǒng)的程序觀點是很難描述它的,但是似乎跟函數(shù)式編程有比較密切的關(guān)系(雖然我并沒有學(xué)過函數(shù)式

YIOS是什么?

yield是生成器中的特有用法,而生成器是一種可以封閉整個運行狀態(tài)、可以隨時暫停繼續(xù)的模型,從傳統(tǒng)的程序觀點是很難描述它的,但是似乎跟函數(shù)式編程有比較密切的關(guān)系(雖然我并沒有學(xué)過函數(shù)式編程……)設(shè)想我們有一個函數(shù),它返回一個序列,這個序列可以是無限長的(也可以是有限長)。當(dāng)然,無限長的序列我們是表示不出來的,內(nèi)存會爆。但是我們通??梢园阉硎境梢粋€廣義表,它的第一項是下一個值,而第二項是剩下所有值用同樣方法形成的廣義表,也就是說我們把返回值:改寫成如果原始的序列是有限長的,則最終某個子表里只有一個元素。這樣的形式對傳統(tǒng)的程序來說似乎沒什么用,但是一般我們認(rèn)為廣義表是可以延遲求值的,也就是說我們可以每次取一個值,然后需要的時候再去計算下一個子表。這個模型就對應(yīng)到了生成器。我們每次調(diào)用生成器讓它返回下一個值的時候,就相當(dāng)于取出子表中第一項的同時,將生成器推進(jìn)到了下一個子表中,這樣我們得生成器就可以返回任意有限甚至無限多個元素,而且只在需要的時候才計算出它們。接下來我們知道,返回一個子表,和返回一個“返回子表的函數(shù)”,其實沒有什么區(qū)別。那么如果返回的這個函數(shù)還能接受參數(shù)呢?我們可以在獲取上一個值之后,給這個生成器傳入一個新的值,從而影響之后返回的結(jié)果,這個就是yield表達(dá)式的作用了,它返回一個值,這個值實際上是從外部傳入的,也就是我們看到的輸入的參數(shù)。但是生成器其實又跟真正的函數(shù)式編程不同,它是在傳統(tǒng)編程方法當(dāng)中實現(xiàn)一個這樣功能結(jié)構(gòu)的語法,真正的函數(shù)式編程自然會毫不猶豫地將它寫成尾遞歸的形式。但我們也知道,尾遞歸可以轉(zhuǎn)化成循環(huán),那么生成器通常就是將尾遞歸轉(zhuǎn)化成循環(huán)之后的形式,它的內(nèi)部封閉了所有本來應(yīng)該在遞歸中作為參數(shù)傳遞的狀態(tài),這樣我們可以用傳統(tǒng)的編程的方法來寫這個生成器,這樣在許多時候是比較方便的,比如說問題異常復(fù)雜,比如說需要調(diào)用I/O等非冪等的方法的時候。由于生成器的第二種形式可以看成每次都隱含返回一個接受參數(shù)的函數(shù),這個函數(shù)可以代替異步編程中的回調(diào)函數(shù),從而用生成器編寫異步過程,這種方法許多時候也被叫做協(xié)程,但從一開始就強調(diào)生成器的這種用法我覺得是不科學(xué)的,它其實只是用生成器代替了異步回調(diào)函數(shù)而已,并不是自己就具有獨立執(zhí)行的能力,把生成器叫做協(xié)程容易讓初學(xué)者忽略了調(diào)度器在異步程序中的重要作用,造成誤導(dǎo)。