一 可迭代物件
什麼叫迭代?:乙個乙個取值,就像for迴圈一樣取值
可以直接作用於for
迴圈的物件統稱為可迭代物件:iterable,有以下兩類
迭代器協議:可以被迭代要滿足要求的就叫做可迭代協議。內部實現了__iter__方法
二 迭代器
迭代器大部分都是在python的內部去使用的,我們直接拿來用就行了
迭代器的優點:如果用了迭代器,節約記憶體,方便操作
三 可迭代和迭代器的相同點和不同點
都可以用for迴圈,迭代器內部多實現了乙個__next__方法
四判斷迭代器和可迭代物件的方法
第一種:判斷內部是不是實現了__next__方法
'__iter__
'in dir(str)#
如果__iter__在這個方法裡面,就是可迭代的。
第二種:
iterable 判斷是不是可迭代物件
iterator 判斷是不是迭代器
from collections importiterable
from collections import
iterator
#比如給乙個字串
s='abc
'print(isinstance(s,iterable))#
isinstance判斷型別的
(isinstance(s,iterator))
#判斷range和map函式
map1=map(abs,[1,-2,3,-4])
(isinstance(map1,iterable))
print(isinstance(map1,iterator))#
map方法自帶迭代器
s=range(100)#
是乙個可迭代的,但是不是迭代器
(isinstance(s,iterable))
print(isinstance(s,iterator))
五 生成器
列表生成式
#*****=一層迴圈*****=
l = [i*i for i in range(1,10)]
(l)#
上面的列表推倒式就相當於下面的
l =
for i in range(1,10):
(l)l =
#*****=多層迴圈*****===
#1.列表推倒式
l = [i*j for i in range(1,10) for j in range(1,10)]
(l)#
2.迴圈
l =for i in range(1,10):
for j in range(1,10):
s = i*j
print(l)
通過列表生成式,建立乙個包含100萬個元素的列表,不僅占用很大的儲存空間,如果我們僅僅需要訪問前面幾個元素,那後面絕大多數元素占用的空間都白白浪費了。
生成器不必建立完整的list,通過next()方法隨用隨取,從而節省大量的空間。
生成器的建立
yield函式:
你可能會問,為什麼list
、dict
、str
等資料型別不是iterator
?
這是因為python的iterator
物件表示的是乙個資料流,iterator物件可以被next()
函式呼叫並不斷返回下乙個資料,直到沒有資料時丟擲stopiteration
錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷通過next()
函式實現按需計算下乙個資料,所以iterator
的計算是惰性的,只有在需要返回下乙個資料時它才會計算。
iterator
甚至可以表示乙個無限大的資料流,例如全體自然數。而使用list是永遠不可能儲存全體自然數的。
小結
生成器都是iterator
物件,但list
、dict
、str
雖然是iterable
,卻不是iterator
。
凡是可作用於for
迴圈的物件都是iterable
型別;
凡是可作用於next()
函式的物件都是iterator
型別,它們表示乙個惰性計算的序列;
集合資料型別如list
、dict
、str
等是iterable
但不是iterator
,不過可以通過iter()
函式獲得乙個iterator
物件。
python3的for
迴圈本質上就是通過不斷呼叫next()
函式實現的
生成器和迭代器
可以直接作用於for迴圈的物件稱為可迭代物件 iterable.可以用isinstance 判斷乙個物件是否是iterable物件。isinstance iterable true isinstance iterable true isinstance 235,iterable false 而生成器...
迭代器和生成器
1 迭代器的概念 print dir 告訴我列表的所有用法 有雙下劃線的所有方法叫做雙下方法,是c語言已經寫好的方法。你可以用不止一種方法呼叫它。列表的用法變集合 set dir 求交集 set dir set dir set dir 求列表,字典,字串它們的用法的交集 他們共同的用法 iterab...
生成器和迭代器
1.iterator 迭代器 舉例 我們對list使用for for i in 1,2,3,4 print i 12 34對string物件使用for for ch in python print ch py thon對字典物件使用for for k in print k yx對檔案使用for fo...