python之路--day11---叠代器和生成器
叠代:
叠代是一個重復的過程,每次重復即一次叠代,並且每次叠代的結果都是下一次叠代的初始值
為什麽要有叠代器:
數據類型的取值,字符串,列表,元組依靠索引可以取值,但是字典,集合,文件這些數據類型無法通過索引取值,
那麽叠代器提供了一種不依靠索引取值的方法,這個方法就是叠代器
可叠代對象
內置有__iter__方法,執行該方法會拿到叠代器
字符串,列表,元組,字典,集合,文件都是可叠代對象
叠代器對象
內置有__next__方法,執行該方法會拿到叠代器對象中的一個值
內置有__iter__方法,執行該方法會拿到叠代器本身
文件是叠代器對象
註意:叠代器對象一定是可叠代對象,可叠代對象不一定是叠代器對象
叠代器的使用
dic={‘a‘:1,‘b‘:2,‘c‘:3}
iter_dic=dic.__iter__() #可叠代對象執行_ _iter_ _方法得到的結果就是叠代器對象
#叠代器對象內置有_ _iter_ _方法和_ _next_ _方法
iter_dic.__iter__() is iter_dic #True 叠代器.__iter__()得到的仍然是叠代器本身
print(iter_dic.__next__())
print(iter_dic.__next__())
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
====================================================================
異常處理
捕捉異常可以使用try/except語句。
try/except語句用來檢測try語句塊中的錯誤,從而讓except語句捕獲異常信息並處理。
如果你不想在異常發生時結束你的程序,只需在try裏捕獲它。
語法:
try: <語句> #運行別的代碼 except <名字>: <語句> #如果在try部份引發了‘name‘異常 except <名字>,<數據>: <語句> #如果引發了‘name‘異常,獲得附加的數據 else: <語句> #如果沒有異常發生
================================================================================
for 循環
基於for循環,我們可以實現不依賴索引取值
1 dic={‘a‘:1,‘b‘:2,‘c‘:3} 2 for k in dic: 3 print(dic[k]
for循環的工作原理
1,執行in後對象的_ _iter_ _()方法,得到一個叠代器對象
2,執行_ _next_ _ 方法,將得到的值賦值變量,然後執行循環體代碼
3,重復過程2,直到捕捉到異常StopIteration
叠代器的優缺點
優點:提供了一種不依賴索引的叠代方式
缺點:無法獲長度
只能一直往後取,無法往前取
python之路--day11---叠代器和生成器