国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python迭代器與生成器用法實例分析

2020-02-15 22:15:16
字體:
來源:轉載
供稿:網友

本文實例講述了Python迭代器與生成器用法。分享給大家供大家參考,具體如下:

迭代器,迭代的工具

什么是迭代器?

指的是一個重復的過程,每一次重復稱為一次迭代,并且每一次重復的結果是下一次重復的初始值

l=['a','b','c']count=0while count <len(l):  print(l[count])  count+=1

為什么要有迭代器

1、對于序列類型:str,list,tuple,可以依賴索引來迭代取值
2、對于dict,set,文件,python必須為我們提供一種不依賴于索引的迭代取值的方式—>迭代器

可迭代的對象

對象內置函數帶有iter的都稱為可迭代的對象

str   name='lqx' name.__iter__list  l=[1,2,3]  l.__iter__tuple  t=(1,2,3)  t.__iter__dict  d={'name':'lqx','age':18,'sex':'male'} d.__iter__set   s={'a','b','c'} s.__iter__file  f=open('a.txt','w',encoding='utf-8')  f.__iter__

迭代器對象

文件即是可迭代對象,也是迭代器對象

f.__iter__
f.__next__

迭代器總結

1、可迭代對象不一定是迭代器對象
2、迭代器對象一定是可迭代的對象
3、調用obj.iter()方式,得到的是迭代器對象(對于迭代器對象,執行iter得打的仍然是它本身)

d={'name':'egon','age':18,'sex':'male'}d_iter=d.__iter__() #使用iter之后,生成的d_iter是迭代器print(d_iter,type(d_iter))print(d_iter.__next__()) #next的倆種使用方式print(next(d_iter))print(next(d_iter))print(next(d_iter)) #迭代器d_iter沒有值的時候,會拋出異常:StopIterationprint(next(d_iter))

如何去除next取不到中導致StopIteration異常

#下面是如何去除StopIteration異常while True:  try:   #使用try:去除異常    print(next(d_iter))  except StopIteration: #去除異常StopIteration    break

for循環詳解:

1、調用in后面的obj_iter=obj.iter()
2、k=obj_iter.next()
3、捕捉stopiteration異常,結束迭代

d={'name':'lqx','age':19,'sex':'male'}for k in d:  print(k)

迭代器優缺點總結

優點:

1、提供一種統一的、不依賴與索引的取值方式,為for循環提供了依據
2、迭代器同一時間在內存中只有一個值—>更節省內存空間

缺點:

1、只能往后取,并且是一次性的
2、不能統計值的個數,即長度

l=[1,2,3,4,5]l_iter=l.__iter__()print(next(l_iter))print(next(l_iter))print(next(l_iter))print(len(l_iter))  #TypeError: object of type 'list_iterator' has no len()

生成器,就是生成迭代器

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 松滋市| 高清| 奉新县| 延吉市| 彩票| 莲花县| 蓝山县| 阿巴嘎旗| 宜兰县| 白银市| 襄垣县| 绥棱县| 平果县| 弥渡县| 买车| 商洛市| 巫溪县| 班戈县| 瓮安县| 德清县| 噶尔县| 什邡市| 通榆县| 平阳县| 布拖县| 彭山县| 鄂托克前旗| 买车| 天津市| 邵东县| 当涂县| 滕州市| 宝山区| 石林| 尉犁县| 古丈县| 迭部县| 固镇县| 凌海市| 瑞昌市| 资兴市|