Python 入門之 Python三大器 之 迭代器
一、迭代器
(1)可迭代對象:
<1> 只要具備__ iter __()方法就是一個可迭代對象
(咱們能夠經過dir()方法去判斷一個對象具備什麼方法,dir()會返回一個列表,這個列表中含有該對象的以字符串的形式的全部方法名)python
lst.__iter__() dict.__iter__()
<2> 可迭代對象的優勢:
能夠直觀的查看裏面的數據。
<3> 可迭代對象的缺點:
佔用內存
可迭代對象不能迭代取值(除去索引,key之外)
(2)迭代器:工具
<1> 具備__ iter __ () 和 __ next __() 兩個方法的就是迭代器
( iter() 和 __ ite r__() 是同樣的 推薦使用iter() )工具
lst = [1,2,3,4,5] l = lst.__iter__() # 將可迭代對象轉換成迭代器 l.__iter__() # 迭代器指定__iter__()仍是原來的迭代器 print(l.__next__()) # 1 print(l.__next__()) # 2
<2> 迭代器基於上一次停留的位置,進行取值
<3> 迭代器的優勢:
惰性機制: 節省空間
<4>迭代器的缺點:
不能直接查看值,迭代器查看到的是一個迭代器的內存地址
一次性,用完就沒有了
不能逆行(後退)
<5> 應用:
當你的數據量過大,大到足以撐爆你的內存或者你以節省內存爲首選因素時,將數據集設置爲迭代器是一個不錯的選擇。(可參考爲何python把文件句柄設置成迭代器)。spa
(3)空間換時間:容器存儲大量的元素,取值時間短,可是容器佔用空間大
(4)時間換空間:迭代器就是節省了空間,可是取值時間較長
(5)for 循環的本質:(重點)
l1 = [1, 2, 3, 4, 5, 6] obj = iter(l1) # 1 將可迭代對象轉化成迭代器 while True: # 2,利用while循環,next進行取值 try: print(next(obj)) except StopIteration: # 3,利用異常處理終止循環 break
(6)Python2和Python3中的區別:code
pyhton3: iter()和 __iter__() 都有 next()和__next__()都有 python2: iter() next()