日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

再谈迭代器,生成器,yield,及和类的使用

發布時間:2025/3/17 编程问答 26 豆豆
生活随笔 收集整理的這篇文章主要介紹了 再谈迭代器,生成器,yield,及和类的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

最近寫項目時,遇到類嵌套和yield的混合使用,覺得比較典型,正好借此加深對迭代器和生成器的理解。

代碼

代碼抽象如下:

from types import FunctionTypeclass RowItems(object):def __init__(self,option,x1,x2,x3):self.option = optionself.x1 = x1self.x2 = x2self.x3 = x3def __iter__(self):yield 1yield 11yield 111yield 1111yield 11111yield 111111yield 1111111class Option(object):def __init__(self,name_or_func,status):self.name_or_func = name_or_funcself.status = statusdef is_func(self):if isinstance(self.name_or_func,FunctionType):return Truedef func(configs):for option in configs:if option.is_func():data_list = Noneelse:data_list = RowItems(option,11,22,33)yield data_listlist_filter_config = [Option('name',True),Option('email',True), ]result = func(list_filter_config) for v in result:for j in v:print(j)

打印結果如下:

1 11 111 1111 11111 111111 1111111 1 11 111 1111 11111 111111 1111111


知識準備:

關于迭代器和生成器的基本知識,可以參考 http://blog.csdn.net/ayhan_huang/article/details/73374894

我們知道,可迭代對象都具有__iter__方法,因此只要在類中定義該方法,那么其實例化對象就是可迭代對象,就可以被for循環,比如:

class Foo(object):def __iter__(self):return iter([1,2,3])obj = Foo() for i in obj:print(i)""" 打印結果 1 2 3 """


而如果一個函數中有yield,那么執行函數就會拿到一個生成器(生成器就是迭代器)。

流程分析:

下面我們具體看一下本文開頭給出的那段代碼的執行流程

  • list_filter_config 中拿到兩個實例化對象,假設為: A & B
  • result = func(list_filter_config),未執行func具邏輯,直接拿到一個生成器對象,假設為F_gen
  • for v in result: 執行生成器,F_gen
  • 執行func :
  • 循環list_filter_config第一個元素 A
  • 實例化RowItems對象,得到可迭代對象,假設為:A_iter
  • func:yield A_iter 返回 A_iter
  • 回到for v in result: A_iter, F_gen
  • for j in v: 迭代A_iter:每打印一行,回到for j in v,觸發A_iter繼續迭代
  • 迭代A_iter 完成,打印出第一個金字塔
  • 回到for v in result: F_gen
  • 執行func :
  • 循環list_filter_config第二個元素 B
  • 實例化RowItems對象,得到可迭代對象,假設為:B_iter
  • func:yield B_iter 返回 B_iter
  • 回到for v in result: B_iter
  • for j in v: 迭代B_iter:每打印一行,回到for j in v,觸發B_iter繼續迭代
  • 迭代B_iter完成,打印出第二個金字塔
  • 新人創作打卡挑戰賽發博客就能抽獎!定制產品紅包拿不停!

    總結

    以上是生活随笔為你收集整理的再谈迭代器,生成器,yield,及和类的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 西西午夜影院 | 亚州av片| 96av在线 | 久久影片 | 国产精品国产三级国产专区53 | 国产精品国产一区 | 91精品国产一区二区在线观看 | 亚洲精品久 | 色天天干 | 亚洲美女中文字幕 | 国内自拍欧美 | 天堂av亚洲av国产av电影 | 午夜插插插 | 香港av在线 | 秋葵视频成人 | 国产做爰全免费的视频软件 | 久久久久黄色片 | 国产精品福利视频 | 国产伦精品一区二区三区千人斩 | 免费午夜人成电影 | 国产激情免费 | 欧美专区亚洲专区 | 久久天堂 | av最新地址| 色视频一区 | 成年人免费av | 天天摸夜夜操 | 91香焦视频| 国产高清视频一区 | 韩国av永久免费 | 亚洲h视频在线观看 | 日韩av免费看 | 少妇一区二区三区 | 伊人影院综合在线 | 波多野结衣视频在线播放 | 18做爰免费视频网站 | 精品一区二区无码 | 国产色在线,com | 日韩日韩日韩日韩日韩 | 91性视频 | 国产国语亲子伦亲子 | 91国模| 精品国产av无码 | youjizz.com中国 | 色牛av | 日韩九九九 | 五月开心激情网 | 精品在线视频一区二区 | 春意影院福利社 | 男人的天堂网在线 | 最新国产中文字幕 | 成人福利网站在线观看 | 中文字幕精品在线观看 | 久久久久久久久影院 | 男生裸体视频 | 久久久精品网站 | 亚洲精品乱码久久久久久蜜桃麻豆 | 亚洲成熟毛多妇女av毛片 | 亚洲一二区 | 特级丰满少妇一级aaa爱毛片 | 久久99热人妻偷产国产 | 欧美日韩另类一区 | 国产视频一二三四区 | 俄罗斯女人裸体性做爰 | 国产成人无码AA精品区 | 国产在线观看xxx | www.xxx国产| 国产高潮流白浆喷水视频 | 伊人久久伊人 | 老司机午夜视频 | 人妻无码久久一区二区三区免费 | 亚洲成人日韩 | 日本黄色美女视频 | 91综合久久 | 日韩av高清在线观看 | 99视频只有精品 | 在线国产一区二区 | 一区二区欧美在线观看 | 九九在线 | 人妻熟人中文字幕一区二区 | 青春草国产视频 | 成年人免费小视频 | 1级黄色大片 | 国产高潮自拍 | 巨胸喷奶水www久久久免费动漫 | 国内精品久久久久 | 欧美成人h | 亚洲精品免费在线播放 | 色久月 | 伊人久久激情 | 日韩av一区二区三区在线观看 | 一本加勒比hezyo黑人 | 九九精品热 | 中文字幕欧美另类精品亚洲 | 插综合 | 四虎影视8848hh | 伦伦影院午夜理伦片 | 男生操女生屁股 | 国产精品成人久久久 |