1. 程式人生 > >Python3 迭代器深入解析

Python3 迭代器深入解析

# 第6章 函式 - 6.1 函式的定義和呼叫 - 6.2 引數傳遞 - 6.3 函式返回值 - 6.4 變數作用域 - 6.5 匿名函式(lambda) - 6.6 遞迴函式 - 6.7 迭代器 - 6.8 生成器 - 6.9 裝飾器 ## 6.7 迭代器 ![](https://img2020.cnblogs.com/blog/1177587/202007/1177587-20200716083104918-1153550315.png) **可迭代物件iterable** 首先可以使用isinstance(物件名,Iterable)驗證某一物件是否為可迭代物件 ````python # 驗證字串、元組、列表、字典、集合型別是否為可迭代物件 from collections.abc import Iterable int1 = 12306 str1 = "MondayTuesdaywednesdayThursdayFridaySaturdaySunday" tuple1 = ("Monday", "Tuesday", "wednesday", "Thursday", "Friday", "Saturday", "Sunday") list1 = ["Monday", "Tuesday", "wednesday", "Thursday", "Friday", "Saturday", "Sunday"] dict1 = {"Monday": "星期一", "Tuesday": "星期二", "wednesday": "星期三", "Thursday": "星期四", "Friday": "星期五", "Saturday": "星期六", "Sunday": "星期日", } set1 = {"Monday", "Tuesday", "wednesday", "Thursday", "Friday", "Saturday", "Sunday"} print(isinstance(int1, Iterable)) print(isinstance(str1, Iterable)) print(isinstance(tuple1, Iterable)) print(isinstance(list1, Iterable)) print(isinstance(dict1, Iterable)) print(isinstance(set1, Iterable)) output: False True True True True True # 驗證的結果是字串、元組、列表、字典、集合型別都是可迭代物件,數值不是可迭代物件。 ```` 可迭代物件的意思就是說這個實體是可迭代的,例如字串、列表、元組、字典、集合、迭代器等等,可以用for ... in進行迴圈, `````python # 那麼都可用for迴圈進行迭代取值,以元組為例 tuple1 = ("Monday", "Tuesday", "wednesday", "Thursday", "Friday", "Saturday", "Sunday") for i in tuple1: print(i,end=',') output: Monday,Tuesday,wednesday,Thursday,Friday,Saturday,Sunday, ````` 可以使用for迴圈迭代的標誌是每個物件內部實現了__iter__方法,驗證下每個可迭代物件是否有這個方法 ````python str1 = "MondayTuesdaywednesdayThursdayFridaySaturdaySunday" tuple1 = ("Monday", "Tuesday", "wednesday", "Thursday", "Friday", "Saturday", "Sunday") list1 = ["Monday", "Tuesday", "wednesday", "Thursday", "Friday", "Saturday", "Sunday"] dict1 = {"Monday": "星期一", "Tuesday": "星期二", "wednesday": "星期三", "Thursday": "星期四", "Friday": "星期五", "Saturday": "星期六", "Sunday": "星期日", } set1 = {"Monday", "Tuesday", "wednesday", "Thursday", "Friday", "Saturday", "Sunday"} print(("__iter__" in dir(str1))) print(("__iter__" in dir(tuple1))) print(("__iter__" in dir(list1))) print(("__iter__" in dir(dict1))) print(("__iter__" in dir(set1))) output: True True True True True ```` 可迭代物件不是迭代器,如何變成迭代器呢? ```python # 可迭代物件通過呼叫__iter__方法就變成迭代器物件 tuple1 = ("Monday", "Tuesday", "wednesday", "Thursday", "Friday", "Saturday", "Sunday") t1 = tuple1.__iter__() print(t1)