迭代器即迭代的工具,那什麼是迭代呢?
迭代是乙個重複的過程,每次重複即一次迭代,並且每次迭代的結果都是下一次迭代的初始值
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 判斷物件是否是可迭代物...