成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

generator

libin19890520 / 2399人閱讀

摘要:前文我們了解如果書寫一個(gè)以及怎樣在一個(gè)類中安裝一個(gè)但有時(shí)候我們只想要一個(gè)簡(jiǎn)單的而且并不想這么復(fù)雜處于這個(gè)目的變成語言里面出現(xiàn)了這個(gè)概念根據(jù)的解釋同樣也有的優(yōu)勢(shì)在輸出值的過程中是分散性的即他不會(huì)保存每一次輸出值這樣在循環(huán)里面更高效并且更節(jié)省效

前文我們了解如果書寫一個(gè)Iterator,以及怎樣在一個(gè)類中安裝一個(gè)Iterator. 但,有時(shí)候我們只想要一個(gè)簡(jiǎn)單的iterator, 而且并不想這么復(fù)雜. 處于這個(gè)目的, 變成語言里面出現(xiàn)了generator 這個(gè)概念. 根據(jù)wiki的解釋:

In fact, all generators are iterators

generator 同樣也有iteartor的優(yōu)勢(shì), 在輸出值的過程中,是分散性的, 即他不會(huì)保存每一次輸出值, 這樣在循環(huán)里面更高效, 并且更節(jié)省效率.

generator syntax

generator的格式和一個(gè)函數(shù)非常類似, 他使用yield代替return, 來返回一個(gè)expression.

def a_gen:
    yield 1
    yield 2

使用generator實(shí)際上就和使用iteartor對(duì)象一樣. 因?yàn)間enerator 返回的就是iterator:

gen = a_gen()
print(next(gen))

既然, generator是Iterator, 那我們能不能在上面使用for...in...循環(huán)呢?
Yes~

for x in a_gen():
    print(x)

另外, 在python中, 提供了一個(gè)常見匿名generator的辦法. 使用 ( ) 即可. 里面放的就是 list comprehension.

a = (x for x in range(10))

這里需要注意, 上面 匿名 generator的返回值是一個(gè)generator object. 這點(diǎn)很重要, 這也是區(qū)分list comrehension 的關(guān)鍵點(diǎn). generator 延續(xù)著iterator的特性: 你要我才給 . 這樣, 不必先生成大量的數(shù)據(jù). 所以,generator 這個(gè)也常常用于處理數(shù)據(jù)較大的集合中.
如果僅僅是造了一個(gè)語法糖, 那generator的存在不就無意義了嗎? 所以,generator的優(yōu)勢(shì),或者說用途還是挺廣泛的.

when we can use generator

用來快速生成Iterator對(duì)象. 即, 以前需要這樣寫,才能生成一個(gè)Iterator.

 class Xlist:
     def __init__(self,a_list):
         self.list = a_list
         self.index = 0
     def __iter__(self):
         return self
     def __next__(self):
         length = len(self.list)
         if(length==self.index):
             # 提出異常
             raise StopIteration
         else:
             result = self.list[self.index]
             self.index += 1
             return result

現(xiàn)在只需要, 使用generator即可

def Xlist(arr):
    for x in arr:
        yield x

省略的不止一點(diǎn)點(diǎn)

2.異步序列的操作
在python中,有時(shí)候讀取文件,可能會(huì)存在異步方式的讀取. 而且,現(xiàn)在主流的后臺(tái)處理程序都是NodeJS, 一種完全異步的編程語言. 而generator 本省就繼承了Iterator的特性, 有一種狀態(tài)暫停的效果. 這種效果, 也可以用來作為異步序列的處理. 比如我們這里可以編寫一個(gè)普通串行:

def co(*callback):
    length = 0
    while length!=len(callback):
        yield callback[length]()
        length+=1


for x in co(lambda :1,lambda: 2):
    print(x)

簡(jiǎn)單總結(jié):

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/45471.html

相關(guān)文章

  • yeoman-generator 入門教程

    摘要:上下文路徑為了方便文件流的輸入輸出,使用兩種位置環(huán)境。目標(biāo)上下文目標(biāo)上下文定義為當(dāng)前工作目錄或含文件最接近的父文件夾。這確保了用戶行為的一致。幫助用戶嚴(yán)重需要覆蓋的內(nèi)容。 摘要 隨著 Web 2.0 和 HTML 5 的流行,現(xiàn)在的 Web 應(yīng)用所能提供的功能和交互能力比之前傳統(tǒng)的 Web 應(yīng)用要強(qiáng)大很多。應(yīng)用的很多實(shí)現(xiàn)邏輯被轉(zhuǎn)移到了瀏覽器端來實(shí)現(xiàn)。瀏覽器不再只提供單一的數(shù)據(jù)接收和展現(xiàn)...

    caiyongji 評(píng)論0 收藏0
  • GAN 論文大匯總

    摘要:在這里匯總了一個(gè)現(xiàn)在和經(jīng)常使用的論文,所有文章都鏈接到了上面。如果你對(duì)感興趣,可以訪問這個(gè)專題。作者微信號(hào)簡(jiǎn)書地址是一個(gè)專注于算法實(shí)戰(zhàn)的平臺(tái),從基礎(chǔ)的算法到人工智能算法都有設(shè)計(jì)。加入實(shí)戰(zhàn)微信群,實(shí)戰(zhàn)群,算法微信群,算法群。 作者:chen_h微信號(hào) & QQ:862251340微信公眾號(hào):coderpai簡(jiǎn)書地址:https://www.jianshu.com/p/b7f... sh...

    lifesimple 評(píng)論0 收藏0
  • Generator的正確打開方式

    摘要:不參與迭代迭代會(huì)執(zhí)行所有的,也就是說,在迭代后的對(duì)象將不會(huì)再返回任何有效的值我們可以在迭代器對(duì)象上直接調(diào)用,來終止后續(xù)的代碼執(zhí)行。 前兩年大量的在寫Generator+co,用它來寫一些類似同步的代碼 但實(shí)際上,Generator并不是被造出來干這個(gè)使的,不然也就不會(huì)有后來的async、await了 Generator是一個(gè)可以被暫停的函數(shù),并且何時(shí)恢復(fù),由調(diào)用方?jīng)Q定 希望本文可...

    happyfish 評(píng)論0 收藏0
  • GAN動(dòng)物園——GAN的各種變體列表

    摘要:生成對(duì)抗網(wǎng)絡(luò)的各種變體非常多,的發(fā)明者在上推薦了這份名為的各種變體列表,這也表明現(xiàn)在確實(shí)非常火,被應(yīng)用于各種各樣的任務(wù)。了解這些各種各樣的,或許能對(duì)你創(chuàng)造自己的有所啟發(fā)。這篇文章列舉了目前出現(xiàn)的各種變體,并將長期更新。 生成對(duì)抗網(wǎng)絡(luò)(GAN)的各種變體非常多,GAN 的發(fā)明者 Ian Goodfellow 在Twitter上推薦了這份名為The GAN Zoo的各種GAN變體列表,這也表明現(xiàn)...

    tianyu 評(píng)論0 收藏0
  • 深入理解 Generator 函數(shù)

    摘要:同時(shí),迭代器有一個(gè)方法來向函數(shù)中暫停處拋出一個(gè)錯(cuò)誤,該錯(cuò)誤依然可以通過函數(shù)內(nèi)部的模塊進(jìn)行捕獲處理。 本文翻譯自:Diving Deeper With ES6 Generators 由于個(gè)人能力有限,翻譯中難免有紕漏和錯(cuò)誤,望不吝指正issue ES6 Generators:完整系列 The Basics Of ES6 Generators Diving Deeper With E...

    jzzlee 評(píng)論0 收藏0
  • es6 Generators詳解

    摘要:每個(gè)任務(wù)必須顯式地掛起自己,在任務(wù)切換發(fā)生時(shí)給予它完全的控制。在這些嘗試中,數(shù)據(jù)經(jīng)常在任務(wù)之間共享。但由于明確的暫停,幾乎沒有風(fēng)險(xiǎn)。 翻譯自 github 概述 什么是generators? 我們可以把generators理解成一段可以暫停并重新開始執(zhí)行的函數(shù) function* genFunc() { // (A) console.log(First); yi...

    zhaot 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<