UML學習筆記—基本概念和初始階段
阿新 • • 發佈:2020-07-14
本文內容皆為作者原創,如需轉載,請註明出處:https://www.cnblogs.com/xuexianqi/p/12560524.html
一:什麼是迭代器
迭代器指的是迭代取值的工具,迭代是一個重複的過程,每次重複都是基於上一次的結果而繼續的,單純的重複並不是迭代
二:為何要有迭代器
迭代器是用來迭代取值的工具,而涉及到把多個值迴圈取出來的型別
有:列表、字串、元組、字典、集合、開啟檔案
l=['egon','liu','alex']
i=0
while i < len(l):
print(l[i])
i+=1
上述迭代取值的方式只適用於有索引的資料型別:列表、字串、元組
為了解決基於索引迭代器取值的侷限性,python必須提供一種能夠不依賴於索引的取值方式,這就是迭代器
三:如何用迭代器
1.可迭代的物件:但凡內建有__iter__方法的都稱之為可迭代的物件
s1=''
# s1.__iter__()
l=[]
# l.__iter__()
t=(1,)
# t.__iter__()
d={'a':1}
# d.__iter__()
set1={1,2,3}
# set1.__iter__()
with open('a.txt',mode='w') as f:
# f.__iter__()
pass
2.呼叫可迭代物件下的__iter__方法會將其轉換成迭代器物件
d={'a':1,'b':2,'c':3} d_iterator=d.__iter__() # print(d_iterator) # print(d_iterator.__next__()) # print(d_iterator.__next__()) # print(d_iterator.__next__()) # print(d_iterator.__next__()) # 丟擲異常StopIteration
while True: try: print(d_iterator.__next__()) except StopIteration: break print('====>>>>>>') # 在一個迭代器取值取乾淨的情況下,再對其取值娶不到 d_iterator=d.__iter__() while True: try: print(d_iterator.__next__()) except StopIteration: break l=[1,2,3,4,5] l_iterator=l.__iter__() while True: try: print(l_iterator.__next__()) except StopIteration: break
3.可迭代物件與迭代器物件詳解
① 可迭代物件
("可以轉換成迭代器的物件"):內建有__iter__方法物件
可迭代物件.__iter__(): 得到迭代器物件
② 迭代器物件
內建有__next__方法並且內建有__iter__方法的物件
迭代器物件.__next__():得到迭代器的下一個值
迭代器物件.__iter__():得到迭代器的本身,說白了調了跟沒調一個樣子
dic={'a':1,'b':2,'c':3}
dic_iterator=dic.__iter__()
print(dic_iterator is dic_iterator.__iter__().__iter__().__iter__())
4.可迭代物件:字串、列表、元組、字典、集合、檔案物件
迭代器物件:檔案物件
s1=''
s1.__iter__()
l=[]
l.__iter__()
t=(1,)
t.__iter__()
d={'a':1}
d.__iter__()
set1={1,2,3}
set1.__iter__()
with open('a.txt',mode='w') as f:
f.__iter__()
f.__next__()
5.for迴圈的工作原理:for迴圈可以稱之為叫迭代器迴圈
# 1.d.__iter__()得到一個迭代器物件
# 2.迭代器物件.__next__()拿到一個返回值,然後將該返回值賦值給k
# 3.迴圈往復步驟2,直到丟擲StopIteration異常for迴圈會捕捉異常然後結束迴圈
d={'a':1,'b':2,'c':3}
for k in d:
print(k)
with open('a.txt',mode='rt',encoding='utf-8') as f:
for line in f: # f.__iter__()
print(line)
list('hello') #原理同for迴圈