day18 迭代器
1,迭代器協(xié)議:對象必須提供一個(gè)next方法,執(zhí)行該方法要么返回迭代中的下一項(xiàng),要么就引起一個(gè)Stoplteration異常,只能往后走不能往前退;
2,可迭代對象:實(shí)現(xiàn)了迭代器協(xié)議的對象(如何實(shí)現(xiàn):對象內(nèi)部定義一個(gè)_iter_()方法)
3,協(xié)議是一種約定,可迭代對象實(shí)現(xiàn)了迭代器協(xié)議,Python的內(nèi)部工具(如for循環(huán),sum,min,max函數(shù)等)使用迭代器協(xié)議訪問對象。
Python中強(qiáng)大的for循環(huán)機(jī)制
for循環(huán)的本質(zhì):循環(huán)所有對象,全都是使用迭代器協(xié)議。
(字符串、列表、元組、字典、集合、文件對象)這些都不是可迭代對象,只不過在for循環(huán)中,調(diào)用了他們內(nèi)部的_iter_方法,把他們變成了可迭代對象,然后for循環(huán)調(diào)用可迭代對象的_next_方法取值,而且for循環(huán)會捕捉StopIteration異常,以終止迭代。
生成器:
可以理解為一種數(shù)據(jù)類型,這種數(shù)據(jù)類型自動(dòng)實(shí)現(xiàn)了迭代器協(xié)議(其他的數(shù)據(jù)類型需要調(diào)用自己內(nèi)置的__iter__方法)所以生成器就是可迭代對象
生成器分類以及在Python中的表現(xiàn)形式:(Python有兩種不同的方式提供生成器)
1.生成器函數(shù):常規(guī)函數(shù)定義,但是,使用yield語句而不是return語句返回結(jié)果。yield語句一次返回一個(gè)結(jié)果,在每個(gè)結(jié)果間,掛起函數(shù)的狀態(tài),以便下次在它離開的地方繼續(xù)執(zhí)行
2.生成器表達(dá)式:類似于列表推導(dǎo),但是,生成器返回按需產(chǎn)生結(jié)果的一個(gè)對象,而不是構(gòu)建一個(gè)結(jié)果列表
#三元表達(dá)式 #name='alex' name= 'wuxiping' res='SB'if name=='alex' else 'shuai' print(res)總結(jié)
- 上一篇: 数据库基础(代码)
- 下一篇: day19 生成器函数