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

資訊專欄INFORMATION COLUMN

python之遞歸生成器[yield用法]

littleGrow / 1421人閱讀

摘要:在所寫的暢銷書籍基礎(chǔ)教程中講到了遞歸生成器的用法。二易懂的程序其實(shí),遞歸生成器非常簡(jiǎn)單,主要分為兩部分基線條件和遞歸條件。我們以易懂通俗的方式來解釋遞歸生成器的用法,并且依次打印列表中的數(shù)字。

? ? ? ? 在Magnus Lie Hetland所寫的暢銷書籍《Python基礎(chǔ)教程》中講到了遞歸生成器的用法。其中,作者舉了一個(gè)例子,假設(shè)有一個(gè)列表nested:

nested = [[[1],2],3,4,[5,[6,7]]]

一、晦澀的程序? ? ??

????????如果我們想要依次打印列表中的數(shù)字,需要用到遞歸生成器,作者M(jìn)agnus Lie Hetland給出的程序如下:?

def flatten(nested):    try:        for sublist in nested:            for element in flatten(sublist):                yield element    except TypeError:        yield nested

? ? ? ? 輸出得到的結(jié)果:

list(flatten(nested))

? ? ? ? 毫無疑問,上述程序得到的結(jié)果是正確。但是,作者所寫的程序讓人不敢恭維。我剛開始看的時(shí)候是一頭霧水,等看了很多遍后,才理解了程序想要表達(dá)的意思??梢赃@么說,作者的這段代碼并不適合用來教學(xué),因?yàn)檫@段代碼晦澀難懂。

二、易懂的程序? ?

????????其實(shí),遞歸生成器非常簡(jiǎn)單,主要分為兩部分:基線條件和遞歸條件。Magnus Lie Hetland直接將try..except...語句的來作為基線條件和遞歸條件,實(shí)在有點(diǎn)讓人難以理解。

? ? ? ? 我們以易懂通俗的方式來解釋遞歸生成器的用法,并且依次打印列表nested中的數(shù)字。

? ? ? ? 1、基線條件

? ? ? ? 基線條件很簡(jiǎn)單,如果迭代的元素是數(shù)字,那么直接yield該元素。

? ? ? ? 2、迭代條件

? ? ? ? 如果迭代的元素不是數(shù)字,則繼續(xù)繼續(xù)迭代。

def flatten(nested):    for sublist in nested:        #基線條件        if isinstance(sublist,int):            yield sublist        #遞歸條件        else:            for element in flatten(sublist):                yield element

? ? ? ? ?此段代碼看起來更加簡(jiǎn)潔明了、通俗易懂,將遞歸生成器的原理展現(xiàn)的淋漓盡致。

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

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

相關(guān)文章

  • Python高級(jí)語法:一篇文章了解yield與Generator成器

    摘要:與子生成器是開始引入的新特性。我們把這種一個(gè)生成器中調(diào)用的另一個(gè)生成器叫做子生成器,而這個(gè)子生成器由關(guān)鍵字生成。由于子生成器很常用,所以引入了新的語法來簡(jiǎn)化這個(gè)代碼。下次,會(huì)繼續(xù)對(duì)之前的結(jié)果進(jìn)行乘方,直到結(jié)果超過為止。 Python高級(jí)語法中,由一個(gè)yield關(guān)鍵詞生成的generator生成器,是精髓中的精髓。它雖然比裝飾器、魔法方法更難懂,但是它強(qiáng)大到我們難以想象的地步:小到簡(jiǎn)單的...

    kamushin233 評(píng)論0 收藏0
  • [譯] PEP 255--簡(jiǎn)單的成器

    摘要:第四種選擇是在不同的線程中運(yùn)行生產(chǎn)者和消費(fèi)者。包含語句的函數(shù)被稱為生成器函數(shù)。然后引發(fā)一個(gè)異常,表明迭代器已經(jīng)耗盡。換句話說,未捕獲的異常終結(jié)了生成器的使用壽命。 showImg(https://segmentfault.com/img/bVbntUq?w=4272&h=2848);我正打算寫寫 Python 的生成器,然而查資料時(shí)發(fā)現(xiàn),引入生成器的 PEP 沒人翻譯過,因此就花了點(diǎn)時(shí)...

    tracymac7 評(píng)論0 收藏0
  • ECMAScript 6新特性印象一:新語法

    摘要:下例實(shí)現(xiàn)了一個(gè)數(shù)組的迭代器在中,可迭代數(shù)據(jù)結(jié)構(gòu)比如數(shù)組都必須實(shí)現(xiàn)一個(gè)名為的方法,該方法返回一個(gè)該結(jié)構(gòu)元素的迭代器。原話是還可以傳遞返回值。 前記 按照規(guī)劃,明年年中,ECMAScript 6(ES6)就要正式發(fā)布了。 最近抽空看了Dr. Axel Rauschmayer的幾篇文章和演講PPT,對(duì)新特性有了些了解。 趁沒忘,抓緊記錄下,夾雜自己的感受。 計(jì)劃分三部分: 新語法...

    馬忠志 評(píng)論0 收藏0

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

0條評(píng)論

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