JavaScript 複習10
阿新 • • 發佈:2020-08-15
一、概念
#迭代器即迭代的工具,那什麼是迭代呢?#迭代是一個重複的過程,每次重複即一次迭代,並且每次迭代的結果都是下一次迭代的初始值
while True: #只是單純地重複,因而不是迭代
print('===>')
l=[1,2,3]
count=0
while count < len(l): #迭代
print(l[count])
count+=1
二、為何要有迭代器?什麼是可迭代物件?什麼是迭代器物件?
釋義三、迭代器物件的使用
dic={'a':1,'b':2,'c':3} iter_dic=dic.__iter__() #得到迭代器物件,迭代器物件即有__iter__又有__next__,但是:迭代器.__iter__()得到的仍然是迭代器本身釋義iter_dic.__iter__() is iter_dic #True print(iter_dic.__next__()) #等同於next(iter_dic) print(iter_dic.__next__()) #等同於next(iter_dic) print(iter_dic.__next__()) #等同於next(iter_dic) # print(iter_dic.__next__()) #丟擲異常StopIteration,或者說結束標誌 #有了迭代器,我們就可以不依賴索引迭代取值了 iter_dic=dic.__iter__() while 1: try: k=next(iter_dic) print(dic[k]) except StopIteration: break #這麼寫太醜陋了,需要我們自己捕捉異常,控制next,python這麼牛逼,能不能幫我解決呢?能,請看for迴圈
四、for迴圈
#基於for迴圈,我們可以完全不再依賴索引去取值了dic={'a':1,'b':2,'c':3}
for k in dic:
print(dic[k]) #for迴圈的工作原理
#1:執行in後物件的dic.__iter__()方法,得到一個迭代器物件iter_dic
#2: 執行next(iter_dic),將得到的值賦值給k,然後執行迴圈體程式碼
- 惰性計算,節省記憶體
#缺點:
- 無法獲取長度(只有在next完畢才知道到底有幾個值)
- 一次性的,只能往後走,不能往前退
六、示例
# 例1 # names=["egon","alex","lxx"] # names="abcdefg" # i=0 # while i < len(names): # print(names[i]) # i+=1 # 例2: # c="hello" # d=["a",'B','C'] # e=("a",'B','C') # a={"k1":111} # g={111,222,333} # f=open("a.txt",'w') # dic={'k1':111,"k2":222,'k3':333} # dic={111,222,333} # iter_dic=dic.__iter__() # print(iter_dic.__iter__() is iter_dic) # print(iter_dic) # res=iter_dic.__next__() # print(res) # # res=iter_dic.__next__() # print(res) # # res=iter_dic.__next__() # print(res) # # res=iter_dic.__next__() # print(res) dic={111,222,333} iter_dic=dic.__iter__() while True: try: print(iter_dic.__next__()) except StopIteration: break print('='*50) iter_dic=dic.__iter__() while True: try: print(iter_dic.__next__()) except StopIteration: break示例