国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

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

littleGrow / 1411人閱讀

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

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

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

一、晦澀的程序? ? ??

????????如果我們想要依次打印列表中的數字,需要用到遞歸生成器,作者Magnus Lie Hetland給出的程序如下:?

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

? ? ? ? 輸出得到的結果:

list(flatten(nested))

? ? ? ? 毫無疑問,上述程序得到的結果是正確。但是,作者所寫的程序讓人不敢恭維。我剛開始看的時候是一頭霧水,等看了很多遍后,才理解了程序想要表達的意思。可以這么說,作者的這段代碼并不適合用來教學,因為這段代碼晦澀難懂。

二、易懂的程序? ?

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

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

? ? ? ? 1、基線條件

? ? ? ? 基線條件很簡單,如果迭代的元素是數字,那么直接yield該元素。

? ? ? ? 2、迭代條件

? ? ? ? 如果迭代的元素不是數字,則繼續繼續迭代。

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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/122202.html

相關文章

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

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

    kamushin233 評論0 收藏0
  • [譯] PEP 255--簡單的成器

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

    tracymac7 評論0 收藏0
  • ECMAScript 6新特性印象一:新語法

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

    馬忠志 評論0 收藏0

發表評論

0條評論

littleGrow

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<