Python3 迭代器深入解析
阿新 • • 發佈:2020-07-16
# 第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)