1、迭代器
python代碼生成器,(1)可迭代對象
<1> 只要具有__ iter__()方法就是一個可迭代對象
(我們可以通過dir()方法去判斷一個對象具有什么方法,dir()會返回一個列表,這個列表中含有該對象的以字符串的形式的所有方法名)
lst.__iter__()
dict.__iter__()
<2> 可迭代對象的優點:
可以直觀的查看里面的數據。
<3> 可迭代對象的缺點:
占用內存
可迭代對象不能迭代取值(除去索引,key以外)
(2)迭代器:工具
<1> 具有__ iter__() 和 __ next__() 兩個方法的就是迭代器
( iter() 和 __ iter__() 是一樣的 推薦使用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把文件句柄設置成迭代器)。
(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中的區別:
pyhton3:
iter()和 __iter__() 都有
next()和__next__()都有
python2:
iter()
next()
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态