可迭代物件
可迭代物件:有__iter__()方法的物件,呼叫該方法返回迭代器物件
例如:str、list、tuple、dict、set、range()、file、迭代器物件、enumerate、生成器
迭代器物件
可迭代物件通過__iter__()方法得到迭代器物件,例如:
.__iter__()
{}.__iter__()
().__iter__()
迭代器物件:有__next__()方法的物件,也就是用該方法一次從迭代器物件中獲得乙個值,取出乙個少乙個
例如:file、enumerate()、生成器
優缺點:迭代器取值可以不依賴索引完成取值,但是不能計算長度,也不能指定位置取值(只能從前往後逐一取值)
重點:①從迭代器物件中取值,取乙個少乙個,如果要從又開始取,,需要重新獲得擁有所有元素的迭代器物件
②迭代器物件也有__iter__()方法,呼叫後等得到的是自己本身(當前含義幾個元素,得到的就只有幾個元素的迭代器物件)
for迴圈迭代
1.自動獲取別迭代物件的迭代器物件
2.在內部一次一次呼叫__next__()方法取值
3.自動完成異常處理,例子如下
iter_obj=[1,2,3].__iter__()
while true:
try: #如果有異常操作,接收
ele = iter_obj.__next__()
print(ele)
except stopiteration: #stopiteration為錯誤型別,當報錯時,執行下面**塊
# print("取完了")
break
4.for取值例子如下
for ele in st1: # 1.自動完成 for ele in st1.__iter__(): 2.自動完成異常處理
print(ele)
生成器
生成器:包含有yield關鍵字的函式就是生成器
def my_generator():
yield 1
yield 2
yield 3
g_obj = my_generator()
my_generate()並不會執行函式體,得到的返回值就是生成器物件,生成器物件就是迭代器物件。(函式的返回type型別就是generator)
r1 = g_obj.__next__() # 1,函式內執行一次,在遇到下乙個yield的時候停止,且拿到yield的返回值
for v in g_obj:
print(v) # 2 | 3,生成器也可以被for迭代,因為生成器也是乙個迭代器物件
生成器的傳送資訊
def fun():
r1=yield 1000
print(r1) #接收send發出的資訊後,r1變成了資訊1
yield 2000
obj=fun()
r1=obj.__next__() #走到第乙個yield後停止,返回1000
print(r1) # 輸出為1000
r1=obj.send('資訊1')
print(r2) #2000
生成器和迭代器
可以直接作用於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...