迭代器

迭代器

1、迭代器的概念

迭代器即迭代的工具,那什麼是迭代呢?
迭代是一個重複的過程,每次重複即一次迭代,而且每次迭代的結果都是下一次迭代的初始值python

while True: #只是單純地重複,於是不是迭代
    print('===>') 
    
l=[1,2,3]
count=0
while count < len(l): #迭代
    print(l[count])
    count+=1

2、可迭代對象

python中一切皆對象,對於這一切的對象中,但凡是有__iter__方法的對象,都是可迭代對象。函數

基於上一次的結果推出下一次結果工具

# 

# 可迭代(具備__iter__方法)對象

x = 2  # 不可迭代
# x.__iter__  # SyntaxError: invalid syntax

s = 'randysun'
s.__iter__()  # str 爲可迭代對象

lt = [1, 2, 3]
lt.__iter__()  # list 爲可迭代對象

dic = {'a': 1, "b": 2}
dic.__iter__()  # dict 爲可迭代對象

tup = (1,)
tup.__iter__()  # tuple 爲可迭代對象

se = {1, 2, 3}
se.__iter__()  # 可迭代對象

f = open('test.py')  
f.__iter__()  # 可迭代對象

def func():
    pass     # 不可迭代對象

# 有__iter__()方法的對象都是可迭代對象,而後除了數字類型和函數以外都是可迭代對象

可迭代的對象:Python內置str、list、tuple、dict、set、file都是可迭代對象。code

s = 'randysun'

s_iter = s.__iter__()
print(s_iter.__next__())
print(s_iter.__next__())
print(s_iter.__next__())

特色:對象

  1. 內置有__iter__方法的都叫可迭代的對象。

49迭代器-裝逼.jpg?x-oss-process=style/watermark

2、迭代器對象

迭代器對象: 具備__iter__以及__next__方法的叫作迭代器對象blog

s = 'nick'  # 可迭代對象,不屬於迭代器對象
s.__iter__()
lt = [1, 2, 3]  # 可迭代對象,不屬於迭代器對象
dic = {'a': 1, 'b': 2}  # 可迭代對象,不屬於迭代器對象
tup = (1,)  # 元組只有一個元素必須得加逗號# 可迭代對象,不屬於迭代器對象
se = {1, 2, 3}  # 可迭代對象,不屬於迭代器對象
f = open('time.py')  # 可迭代對象,迭代器對象

# 只有文件是迭代器對象
lt = [1, 2, 3]
lt_iter = lt.__iter__()
while True:
    try:
        print(lt_iter.__next__())
    except StopIteration:
        break

1
2
3索引

for i in lt:  # 可迭代對象;迭代器對象 不依賴索引取值,而是迭代取值
    print(i)
# 1. 首先使用iter把it變成迭代器對象,對文文件也要使用iter方法把文件再一次iter
# 2. 而後使用next方法進行迭代取值
# 3. 判斷StopIteration異常,遇到異常終止
  • 可迭代對象:具備__iter__方法的對象就是可迭代對象,除了數字類型和函數都是可迭代對象
  • 可迭代器對象:具備__iter__和__next__方法的都是迭代器對象,只有文件
  • 迭代器對象必定是可迭代對象,可迭代對象不必定是可迭代器對象
  • for循環 == 迭代循環
    1. 把lt(可迭代對象/迭代器對象)用__iter__方法轉換成迭代器對象
    2. 使用__next__取出迭代器裏的全部值
    3. 使用__next__方法取盡迭代器中的全部值,必定會報錯,經過異常捕捉退出while循環
    4. 解決了不依賴索引取值
  • 優缺點
  1. 優勢:內存

    • 提供一種統一的、不依賴於索引的迭代方式
    • 惰性計算,節省內存
  2. 缺點:
    • 沒法獲取長度(只有在next完畢才知道到底有幾個值)
    • 一次性的,只能日後走,不能往前退
相關文章
相關標籤/搜索