可迭代物件和迭代器

2022-04-11 03:03:23 字數 2738 閱讀 2967

迭代器即迭代的工具,那什麼是迭代呢?

迭代是乙個重複的過程,每次重複即一次迭代,並且每次迭代的結果都是下一次迭代的初始值

while true: #只是單純地重複,因而不是迭代

print('===>')

l=[1,2,3]

count=0

while count < len(l): #迭代

print(l[count])

count+=1

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

# 

# 可迭代(具有__iter__方法)物件

x = 2 # 不可迭代

# x.__iter__ # syntaxerror: invalid syntax

s = 'randysun'

s.__iter__() # str 為可迭代物件 lt = [1, 2, 3]

lt.__iter__() # list 為可迭代物件

dic =

dic.__iter__() # dict 為可迭代物件

tup = (1,)

tup.__iter__() # tuple 為可迭代物件

se =

se.__iter__() # 可迭代物件

f = open('test.py')

f.__iter__() # 可迭代物件

def func():

pass # 不可迭代物件

# 有__iter__()方法的物件都是可迭代物件,然後除了數字型別和函式之外都是可迭代物件

可迭代的物件:python內建str、list、tuple、dict、set、file都是可迭代物件,除了數字型別外。

s = 'randysun'

s_iter = s.__iter__()

print(s_iter.__next__())

print(s_iter.__next__())

print(s_iter.__next__())

特點:內建有__iter__方法的都叫可迭代的物件。(可以理解為可以for迴圈列印)

[只有字串和列表、元組都是依賴索引取值的,而其他的可迭代物件都是無法依賴索引取值的。因此我們得找到乙個方法能讓其他的可迭代物件不依賴索引取值。

迭代器物件: 具有__iter__以及__next__方法的叫做迭代器物件,只有檔案是迭代器物件

s = 'randy'  # 可迭代物件,不屬於迭代器物件

s.__iter__()

lt = [1, 2, 3] # 可迭代物件,不屬於迭代器物件

dic = # 可迭代物件,不屬於迭代器物件

tup = (1,) # 元組只有乙個元素必須得加逗號# 可迭代物件,不屬於迭代器物件

se = # 可迭代物件,不屬於迭代器物件

f = open('time.py') # 可迭代物件,迭代器物件

# 只有檔案是迭代器物件

通過迭代物件和迭代器實現遍歷列表

# 不依賴索引取值 for迴圈原理

lt = [1, 2, 3]

lt_iter = lt.__iter__()

while true:

try:

print(lt_iter.__next__())

except stopiteration:

break

123

for i in lt:  # 可迭代物件;迭代器物件 不依賴索引取值,而是迭代取值

print(i)

# 1. 首先使用__iter__把lt變成迭代器物件,對文檔案也要使用iter方法把檔案再一次iter

# 2. 然後使用__next__方法進行迭代取值

# 3. 判斷stopiteration異常,遇到異常終止

for迴圈稱為迭代器迴圈,in後必須是可迭代的物件。

lis = [1, 2, 3]

for i in lis:

print(i)

123

因為迭代器使用__iter__後還是迭代器本身,因此for迴圈不用考慮in後的物件是可迭代物件還是迭代器物件。

由於對可迭代物件使用__iter__方法後變成乙個迭代器物件,這個迭代器物件只是占用了一小塊記憶體空間,他只有使用__next__後才會吐出乙個乙個值。如lis = [1,2,3,4,5,...]相當於乙個乙個雞蛋,而lis = [1,2,3,4,5,...].__iter__相當於乙隻老母雞,如果你需要蛋,只需要__next__即可。

python2中

print(range(10))  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
python3中

print(range(10))  # range(0, 10)
優點:

缺點:

迭代器和可迭代物件

本篇文章簡單談談可迭代物件,迭代器和生成器之間的關係。三者簡要關係圖 可迭代物件與迭代器 剛開始我認為這兩者是等同的,但後來發現並不是這樣 下面直接丟擲結論 1 可迭代物件包含迭代器。2 如果乙個物件擁有 iter 方法,其是可迭代物件 如果乙個物件擁有next方法,其是迭代器。3 定義可迭代物件,...

可迭代物件和迭代器

建立這個物件的類中是否定義了 iter 方法,如果定義了,那麼這個物件就是可迭代物件。isinstance obj,iterable 判斷 判斷乙個物件是不是迭代器的時候,需要判斷建立這個例項物件的類中是否定義了 iter 方法和 next 方法,如果都定義了,那麼這個物件就是可迭代物件。所以如果乙...

可迭代物件和迭代器

實現了 iter 方法的物件稱為可迭代物件,在python中,可迭代物件有字串 列表 元組 字典 集合等 class mynumbers def init self self.a 1 def iter self return self my numbers mynumbers 判斷物件是否是可迭代物...