1. 程式人生 > >python之路--day11---叠代器和生成器

python之路--day11---叠代器和生成器

使用 print 捕獲異常 不依賴 htm () exc 生成 語句

叠代:

  叠代是一個重復的過程,每次重復即一次叠代,並且每次叠代的結果都是下一次叠代的初始值

為什麽要有叠代器:

  數據類型的取值,字符串,列表,元組依靠索引可以取值,但是字典,集合,文件這些數據類型無法通過索引取值,

  那麽叠代器提供了一種不依靠索引取值的方法,這個方法就是叠代器

可叠代對象

  內置有__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---叠代器和生成器