生成器是可迭代物件,可以理解成為一種資料型別,這種資料型別自動實現了迭代器協議(其他的資料型別需要呼叫自己內建的__iter__方法)
在python中有兩種表現形式,一種是以函式的形式yield(),二是生成器表示式
yield()函式:
def
test()
:yield
1g = test(
)print
(g)#輸出乙個生成器物件,需要next
print
(g.__next__())
#輸出1
三元表示式:
如果name==yibole,結果為true,則返回帥哥,else為sb
name =
'yibole'
'帥哥'
if name ==
'yibole'
else
'sb'
#前面的引數為二元 if開始為第一元 else開始第三元p
列表解析:
那雞生蛋為例子
egg_list =
for i in
range(10
):'egg%s'
%i)print
(egg_list)
#也可以寫成
['egg%s'
%i for i in
range(10
)if i>5]
#然後列印就好了
#主體是for迴圈,二元是雞蛋處理,三元是判斷條件
如果資料量很大會很佔記憶體,列表解析可以很方便的讓**生成出列表,但是缺點是佔記憶體
所以就可以衍生出:生成器表示式
(『egg%s』%i for i in range(10))
這時候再用__next__或者next()就可以了
這個就是生成器表示式
函式中yield就會幫你實現了生成器協議,除了做返回值以外還會把值變成可迭代物件
把列表解析的換成(),得到的就是生成器表示式,列表解析與生成器表示式都是一種便利的程式設計方式,只是聲稱其表示式更節省記憶體
python不但使用迭代器協議讓for迴圈變得更加通用,大部分內建函式,也是使用迭代器協議訪問物件的。例如sum函式是python的內建函式,該函式使用迭代器協議訪問物件,而生成器實現了迭代器協議,所以我們可以直接這樣計算一系列值的和:
sum(x**2) for x in xrange(4))
而不是多此一舉:
sum([x**2 for x in xrange(4)])
三元運算,列表解析,生成器表示式
一,生成器就是可迭代物件,可以理解為一種資料型別,這種資料型別自動實現了迭代器協議。1.生成器函式 常規函式定義,但是使用yield語句而不是return語句,yield可以返回多個值。可以保留函式的執行狀態。2.第二行的式子稱為 三元表示式 沒有四元表示式,可以兩元 name alex res h...
生成器表示式 三元表示式 列表解析
迭代器 s dog cat res s.iter print res.next print res.next 迭代器就是 iter laomuji 雞蛋 s i for i in range 10 生成器表示式不需要再呼叫iter res 雞蛋 s i for i in range 10 列表解析把...
生成器 三元運算 列表解析
一 什麼是生成器 可以理解為是一種資料型別,這種資料型別自動實現了迭代器協議 其他資料型別需要呼叫自身內建的 iter 方法 所以生成器是可迭代物件。二 生成器分類及在python中的表現形式 1 生成器函式 常規函式定義,但是,使用yield語句而不是return語句返回結果。yield語句一次返...