Python學習之路 day 13 迭代器

2021-08-22 08:44:24 字數 3026 閱讀 5947

一. 迭代器介紹

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.為何要用迭代器 迭...