python 迭代器 列表解析 三元表示式

2022-07-30 17:42:13 字數 2700 閱讀 8860

一.迭代器

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語句一次返...