一. 迭代器介紹
1. 什麼是迭代器
1.1. 迭代器指的是迭代取值的工具
1.2. 迭代是一重複的過程,每一次重複都是基於上一次的結果而來
#單純的重複不是迭代
# i=0
# while true:
# print(i)
# 迭代:重複+每次重複都是基於上一次的結果而進行
l=['a','b','c']
i=0while i < len(l):
print(l[i])
i+=1
2. 為何要用迭代器
迭代器提供了一種通用的且不依賴於索引的迭代取值方式
3. 如何用迭代器
l=['a','b','c']l='hello'
l=('a','b','c')
i=0while i < len(l):
print(l[i])
i+=1
一 :可迭代的物件iterable:但凡內建有__iter__方法的物件都稱之為可迭代的物件
可迭代的物件:str,list,tuple,dict,set,檔案物件
a=1b=1.1
c='hello'
d=['a','b']
e=('a','b')
j=g=
f=open('a.txt','w')
執行可迭代物件下的__iter__方法,返回的值就是乙個迭代器物件iterator
dic=
iter_dic=dic.__iter__()
# print(iter_dic)
print(iter_dic.__next__())
print(iter_dic.__next__())
print(iter_dic.__next__())
print(iter_dic.__next__()) #stopiteration應該被當成一種結束訊號
f=open('a.txt','rt',encoding='utf-8')
iter_f=f.__iter__()
print(iter_f.__next__())
print(iter_f.__next__())
print(iter_f.__next__())
print(iter_f.__next__())
l=['a','b','c']
iter_l=l.__iter__()
print(iter_l.__next__())
print(iter_l.__next__())
print(iter_l.__next__())
print(iter_l.__next__())
l=['a','b','c']
print(l.__iter__().__next__())
print(l.__iter__().__next__())
print(l.__iter__().__next__())
iter_l=l.__iter__()
print(iter_l.__next__())
print(iter_l.__next__())
二: 迭代器物件
1. 既內建有__next__方法的物件,執行迭代器__next__方法可以不依賴索引取值
2. 又內建有__iter__方法的物件,執行迭代器__iter__方法得到的仍然是迭代器本身
ps:1.迭代器物件一定是可迭代的物件,而可迭代的物件卻不一定是迭代器物件
2.檔案物件本身就是乙個迭代器物件
l=['a','b','c']
iter_l=l.__iter__() # 呼叫可迭代的物件__iter__得到的是迭代物件,
print(iter_l is iter_l.__iter__().__iter__().__iter__().__iter__().__iter__().__iter__())
dic=
dic=
# print(len(dic)) #dic.__len__()
iter_dic=iter(dic) # dic.__iter__()
while true:
try:
print(next(iter_dic)) #iter_dic.__next__()
except stopiteration:
break
print('='*100)
# 同乙個迭代器只能完整地取完一次值
iter_dic=iter(dic) #dic.__iter__()
while true:
try:
print(next(iter_dic)) #iter_dic.__next__()
except stopiteration:
break
for本質應該稱之為迭代器迴圈
工作原理
1. 先呼叫in後面那個物件的__iter__方法,將其變成乙個迭代器物件
2. 呼叫next(迭代器),將得到的返回值賦值給變數名k
3. 迴圈往復直到next(迭代器)丟擲異常,for會自動捕捉異常然後結束迴圈
ps:從for角度,可以分辨出但凡可以被for迴圈迴圈取值的物件都是可迭代的物件
dic=
for k in dic:
print(k)
for k in dic:
print(k)
三:迭代器總結
優點: 1. 提供一種通用的且不依賴於索引的迭代取值方式
2. 同一時刻在記憶體中只存在乙個值,更節省記憶體
缺點: 1. 取值不如按照索引的方式靈活,(不能取指定的某乙個值,而且只能往後取)
2. 無法**迭代器的長度
l=[1,2,2,3,3,3,3,3,3,3,3,3,3,3]
iter_l=iter(l)
print(iter_l)
names = ['egon', 'alex', 'yxx']
res=map(lambda x:x+"_nb",names)
print(res)
python之路 day13 模組
1,什麼是模組 模組就是系統功能的集合體,在python中,乙個py檔案就是乙個模組,例如 module.py 其中module叫做模組名 2,使用模組 2.1 import匯入模組 首次帶入模組發生三件事 1,建立乙個模組的命名空間 2,執行模組對應檔案,將產生的名字存放於1中的命名空間 3,在當...
Java學習之路 day13
今天進度暫緩,知識點很多需要加強練習和思考的,總結如下 1 extends父子類的繼承和implements介面的實現,是多型的前提 多型就是說物件的多種形態 乙個學生可以是學生,也是人類 2 多型性的體現 父類引用指向子類物件 格式 左父右子 子類就是乙個父類 a 父子類之間的繼承 父類名稱 物件...
Python學習之路 day 13 迭代器
一.迭代器介紹 1.什麼是迭代器 1.1.迭代器指的是迭代取值的工具 1.2.迭代是一重複的過程,每一次重複都是基於上一次的結果而來 單純的重複不是迭代 i 0 while true print i l a b c i 0while i len l print l i i 1 2.為何要用迭代器 迭...