一.迭代器
1.迭代器協議和迭代器物件
(1)迭代器協議是指:
物件必須提供乙個next方法,執行該方法要麼返回迭代中的下一項,要麼就引起乙個stoplteration異常,以終止迭代
(2)可迭代物件:
實現了迭代器協議的物件(如何實現:物件內部定義乙個_iter_()方法)
(3)協議:
是一種約束,可迭代物件實現了迭代器協議,python的內部工具(如:for迴圈,sum,min函式等)使用迭代器協議訪問物件
2.標準的迭代器介面有兩個方法:
_iter_:返回self,以便在應該使用迭代器的地方使用迭代器,例如:for迴圈_next_:返回下乙個可用的元素,如果沒有元素了丟擲stopiteration異常
3.簡單來說:可迭代器
就是建立乙個物件的類是否定義了_iter_()方法,如果定義了,那麼這個物件就是可迭代物件
4.可迭代物件和迭代器的區別:
可迭代物件有_iter_方法,每次都要例項化乙個新的迭代器
迭代器要實現_next_和_iter_兩個方法,_next_用於獲取下乙個元素,_iter_用於迭代器本身,所以迭代器可以迭代,但是可迭代物件不是迭代器
注:可迭代物件一定不能是自身的迭代器
案例:
list=[1,2,3,4,5]a_list=list.__iter__() #遵循迭代器協議,生成可迭代器
print(a_list.__next__()) #列印結果為1
print(a_list.__next__()) #列印結果為2
print(a_list.__next__()) #列印結果為3
print(a_list.__next__()) #列印結果為4
print(a_list.__next__()) #列印結果為5
print(a_list.__next__()) #報錯,超出了範圍
注:超出了list的範圍會報錯
二.生成器
1.理解生成器
可以理解為是一種資料型別,這種資料型別可以自動實現迭代器協議(其它的資料型別需要呼叫自己的內建的_iter_方法),所以生成器就是可迭代物件
2.生成器分類
(1)生成器函式:
常用函式定義,但是使用yield語句而不是return語句返回結果,yield語句一次返回乙個結果,在每個結果中間,掛起函式的狀態,以便下次從它離開的地方繼續執行
(2)生成器表示式:
可以理解為列表推導的惰性版本,它的好處就是延時計算,不會直接構成列表,簡單來說就是一次返回乙個結果,不是一次生成所有結果
3.生成器的優點:
使用生成器對延遲操作提供了支援。延遲操作是指需要的時候才產生結果,而不是立即產生結果,這就是生成器的好處
4.yield
概述:yield關鍵字的核心用法,即逐個生成。在這裡獲取了兩個生成器產生的值,即0和1。分別由next函式和send()函式獲得
常用的三種方法:
生成器物件._next_()next(生成器物件)
生成器物件.send("從引數")
案例:
#使用yield特徵def fun():
a = [1, 2, 3, 4] #定義乙個a的列表
print("這是方法")
yield a[2] #這裡我是通過下標來取得
text=fun()
print(text)
print(text.__next__())
#輸出結果為:
##這是方法
#3
5.三元表示式
語法:
真值結果 if 判斷語法 else 假值結果
#案例:
name="lisi"name_list="名字正確" if name=="lisi" else "沒有這個人" #三元表示式,如果條件成立的情況下,這執行if前面的內容,如果條件不成立的,則執行else下的內容
print(name_list)
#這裡結果為:「名字正確」
6.列表解析
案例:
#通過二元表示式來寫list=["第%s次" %i for i in range(10)]#這是二元表示式
print(list)
#結果為:['第0次', '第1次', '第2次', '第3次', '第4次', '第5次', '第6次', '第7次', '第8次', '第9次']
#通過三元表示式(第三元後面需要新增i>5的條件)
list_s=["第%s次" %i for i in range(10) if i>5]#這是三元表示式,在第三元上新增i>5的條件
print(list_s)
#結果為:['第6次', '第7次', '第8次', '第9次']
注:可以有二元表示式,沒有四元表示式
補充:
把列表解析的換成()得到的就是生成器表示式
列表解析與生成器表示式都是一種便利的程式設計方式,只不過生成器表示式更節約記憶體
190329迭代器 生成器 三元運算 列表解析
可迭代物件 遵循迭代器協議,即可迭代物件,可以被for迴圈的就是可迭代物件 l iter l l.iter 將列表轉換為迭代器 print iter l.next print next iter l 1 生成器函式def f for i in range 10 yield i t f print t...
函式 迭代器 生成器 列表解析 三元表示式
可迭代物件 obj.iter 迭代器 iter1 obj.iter 1iter1.next 2iter2.next 迭代器 優點 不依賴索引 惰性計算,節省記憶體 缺點 不如按照索引的取值方便 一次性,只能往後取,不能回退 迭代器的應用 判斷可是否是可迭代物件和迭代器 from collection...
生成器 三元運算 列表解析
一 什麼是生成器 可以理解為是一種資料型別,這種資料型別自動實現了迭代器協議 其他資料型別需要呼叫自身內建的 iter 方法 所以生成器是可迭代物件。二 生成器分類及在python中的表現形式 1 生成器函式 常規函式定義,但是,使用yield語句而不是return語句返回結果。yield語句一次返...