Python 入門之 Python三大器 之 迭代器

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()
相關文章
相關標籤/搜索