摘要:在所寫的暢銷書籍基礎(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ù)字。
? ? ? ? 基線條件很簡(jiǎn)單,如果迭代的元素是數(shù)字,那么直接yield該元素。
? ? ? ? 如果迭代的元素不是數(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
摘要:與子生成器是開始引入的新特性。我們把這種一個(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)單的...
摘要:第四種選擇是在不同的線程中運(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í)...
摘要:下例實(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ì)劃分三部分: 新語法...
閱讀 1422·2021-10-11 10:59
閱讀 3119·2019-08-30 15:54
閱讀 2737·2019-08-30 13:19
閱讀 2465·2019-08-30 13:02
閱讀 2381·2019-08-30 10:57
閱讀 3360·2019-08-29 15:40
閱讀 990·2019-08-29 15:39
閱讀 2314·2019-08-29 12:40