python生成器

生成器

生成器是python特有的一個語法萨赁,包含yield 關鍵字的函數(shù),當他被調(diào)用的時候兆龙,函數(shù)體中的代碼不會被執(zhí)行,而是返回一個迭代器敲董。每次請求一個值紫皇,就會執(zhí)行生成器中的代碼,直到遇到一個yield或return語句腋寨。yield意味著生成一個值聪铺。return語句意味著生成器停止執(zhí)行。
下面是一個簡單的生成器

nested =   [[1,2],[3,4],[5]]
def flatten(nested):
     for sublist  in nested:
           for  element in sublist:
                   yield element

上述函數(shù)使用了雙重循環(huán)萄窜,加上yield進行構造生成器的設置铃剔,yield 函數(shù)與return最大的區(qū)別在于,return語句返回一個值查刻,而yield則是產(chǎn)生一個值键兜,但是凍結(jié)他,函數(shù)停在那點等待被激活穗泵。函數(shù)被激活后從那一點開始執(zhí)行普气。
下面是執(zhí)行生成器來迭代所有的值

for num in flatten(nested):
      print num
1
2
3
4
5
list(flatten(nested))
[1,2,3,4,5]

遞歸生成器

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

其實生成器并非什么特殊的的魔法,他通過其他基本語句也能打到相同的目的佃延,對于大多數(shù)生成器而言

yield some_expression

都·等價與

result.append(some_expression)
最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末现诀,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子履肃,更是在濱河造成了極大的恐慌仔沿,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,546評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件尺棋,死亡現(xiàn)場離奇詭異封锉,居然都是意外死亡象对,警方通過查閱死者的電腦和手機深胳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,224評論 3 395
  • 文/潘曉璐 我一進店門纤垂,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枣申,“玉大人猖闪,你說我怎么就攤上這事趟妥」髋” “怎么了檬嘀?”我有些...
    開封第一講書人閱讀 164,911評論 0 354
  • 文/不壞的土叔 我叫張陵脊阴,是天一觀的道長握侧。 經(jīng)常有香客問我蚯瞧,道長,這世上最難降的妖魔是什么品擎? 我笑而不...
    開封第一講書人閱讀 58,737評論 1 294
  • 正文 為了忘掉前任埋合,我火速辦了婚禮,結(jié)果婚禮上萄传,老公的妹妹穿的比我還像新娘甚颂。我一直安慰自己,他們只是感情好秀菱,可當我...
    茶點故事閱讀 67,753評論 6 392
  • 文/花漫 我一把揭開白布振诬。 她就那樣靜靜地躺著,像睡著了一般衍菱。 火紅的嫁衣襯著肌膚如雪赶么。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,598評論 1 305
  • 那天脊串,我揣著相機與錄音辫呻,去河邊找鬼。 笑死琼锋,一個胖子當著我的面吹牛放闺,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播斩例,決...
    沈念sama閱讀 40,338評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼雄人,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了念赶?” 一聲冷哼從身側(cè)響起础钠,我...
    開封第一講書人閱讀 39,249評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎叉谜,沒想到半個月后旗吁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,696評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡停局,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,888評論 3 336
  • 正文 我和宋清朗相戀三年很钓,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片董栽。...
    茶點故事閱讀 40,013評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡码倦,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出锭碳,到底是詐尸還是另有隱情袁稽,我是刑警寧澤,帶...
    沈念sama閱讀 35,731評論 5 346
  • 正文 年R本政府宣布擒抛,位于F島的核電站推汽,受9級特大地震影響补疑,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜歹撒,卻給世界環(huán)境...
    茶點故事閱讀 41,348評論 3 330
  • 文/蒙蒙 一莲组、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧暖夭,春花似錦锹杈、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,929評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至寥假,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間霞扬,已是汗流浹背糕韧。 一陣腳步聲響...
    開封第一講書人閱讀 33,048評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留喻圃,地道東北人萤彩。 一個月前我還...
    沈念sama閱讀 48,203評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像斧拍,于是被迫代替她去往敵國和親雀扶。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,960評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 作者:邵正將 來源:PytLab 在python中生成器可以很方便的實現(xiàn)迭代協(xié)議肆汹。生成器通過生成器函數(shù)產(chǎn)生愚墓,生成器...
    PyChina閱讀 1,574評論 0 6
  • Python列表生成式 列表推導式的一般語法 這種語法等價于以下代碼 下面舉一些列表推導式的栗子: Python中...
    So_ProbuING閱讀 1,281評論 0 0
  • 1.迭代 在理解生成器之前岗照,先理解迭代村象。 1.1 迭代 如果給定一個list或tuple,我們可以通過for循環(huán)來...
    XYZeroing閱讀 802評論 1 3
  • 什么是生成器?通過列表生成式攒至,我們可以直接創(chuàng)建一個列表厚者。但是,受到內(nèi)存限制迫吐,列表容量肯定是有限的库菲。而且,創(chuàng)建一個包...
    youngkun閱讀 335評論 0 0
  • 1.什么是生成器 通過列表生成式渠抹,我們可以直接創(chuàng)建一個列表蝙昙。但是闪萄,受到內(nèi)存限制,列表容量肯定是有限的奇颠。而且败去,創(chuàng)建一...
    一只寫程序的猿閱讀 940評論 0 4