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