三元運(yùn)算符 列表解析 生成器表達(dá)式
生成器
可以理解為一種數(shù)據(jù)類型,這種數(shù)據(jù)類型自動實(shí)現(xiàn)了迭代器協(xié)議(其他的數(shù)據(jù)類型需要調(diào)用自己內(nèi)置的iter方法),所以生成器是可迭代對象
生成器分類再python中的表現(xiàn)形式:(python有兩種不同的方式提供生成器)
1、生成器函數(shù):常規(guī)函數(shù)定義,但是使用yield語句而不是return返回的結(jié)果,yeild語句一次返回一個結(jié)果,在每個結(jié)果中間,掛起函數(shù)的狀態(tài),以便下次從他離開的地方繼續(xù)執(zhí)行。
2.生成器表達(dá)式:類似于類表推導(dǎo),但是生成器返回按需生產(chǎn)結(jié)果的一個對象,而不是一次構(gòu)建一個結(jié)果列表
為什么使用生成器以及生成器得優(yōu)點(diǎn)
python 使用生成器對延遲操作提供支持,所謂延遲操作,是指在需要的時候產(chǎn)生的結(jié)果,而不是立即產(chǎn)生的結(jié)果,這也是生成器的好處
生成器函數(shù)
可以yield 多次
def test():
yield 1
yield 2
yield 3
g = test()
print(g)
print(g.__next__())
生成器表達(dá)式 和列表解析
列表解析
gglist = []
for i in range(10):
gglist.append('雞蛋%s' %i)
print(gglist)
gg_s = [ '雞蛋%s' %i for i in range(10) if i >5]
print(gg_s)
生成器表達(dá)式 比列表解析更節(jié)省內(nèi)存
laomuji = ( '雞蛋%s' %i for i in range(10) if i >5)
print(laomuji.__next__())
print(laomuji.__next__())
print(laomuji.__next__())
三元表達(dá)式 沒有四元表達(dá)式
name = 'alex'
a ='sb' if name=='alex' else 'shuaige'
print(a)
生成器小結(jié)
1、可迭代對象
2、實(shí)現(xiàn)了延遲計(jì)算,省內(nèi)存
3生成器本質(zhì)和其他數(shù)據(jù)類型一樣,能實(shí)現(xiàn)了迭代器協(xié)議,只不過生成器附加了一個延遲計(jì)算省內(nèi)存的好處,其余的可迭代對象可沒有這點(diǎn)好處。