1,可迭代對象
list dic str set tuple f=open() range() enumrate
2,dir()查看一個數據類型的全部方法
print(dir([]))
3,雙下方法
是能夠用特殊符號引用的方法
print([1].__add__([2])) #>>>[1, 2]
print([1]+[2]) #>>>[1, 2] #這個其實執行的就是上面的代碼
4,Iterable 可迭代的 __iter__
只要是能被for循環的數據類型,就必定擁有 __iter__方法,便可迭代
print('__iter__' in dir(list)) #>>>True #判斷是否可迭代
5,一個列表執行了 __iter__()以後的返回值就是一個迭代器
print([].__iter__())
6,找迭代器獨有的方法
print(dir([])) #[]不是迭代器
print(dir([].__iter__())) #[].__iter__()是迭代器
print(set(dir([].__iter__())) - set(dir([]))) #求差集,找到迭代器獨有的方法
print([1, 'a', 'ab'].__iter__().__length_hint__()) #元素個數
後兩個結果:
{'__length_hint__', '__setstate__', '__next__'}
3
#方法說明:
'__length_hint__' ————>元素個數
'__setstate__' ————>指定迭代開始位置
'__next__' ————>取下一個值
7,迭代一個列表
lis = [1, 2, 3]
iterator = lis.__iter__() #迭代器
print(iterator.__next__()) #依次取值
print(iterator.__next__())
print(iterator.__next__())
print(iterator.__next__()) #超出範圍報錯
8,python
9,isinstance(被判斷,是什麼) 是判斷是否是那個東西
from collections import Iterable
from collections import Iterator
print(isinstance([],Iterator))
print(isinstance([],Iterable))
10,迭代器的概念:
可迭代協議:只要含有__iter__方法的可是可迭代的
迭代器協議:內部含有__iter__和__next__方法的就是迭代器
注:
①能夠被for循環的都是可迭代的
②可迭代的內部都有__iter__方法
③只要是迭代器就必定可迭代
④可迭代的__iter__()方法就可獲得一個迭代器
⑤__next__()可獲取迭代器一個一個的值
⑥for循環實際上就是再使用迭代器
11,for循環
只要是可迭代對象的時候才能用for
當咱們遇到一個未知的變量,不能肯定能不能for循環時,就判斷它是否可迭代
11.1,for循環的執行本質:
for i in L:
pass
至關於:第一步:iterator = L.__iter__()
第二步:iterator.__next__()
11.2,模擬一個for迭代器
lis = [1,2,3,4]
iterator = lis.__iter__()
while True:
print(iterator.__next__())
12,迭代器的好處:
①很方便使用,且只能取全部的數據一次
②從容器類型中一個一個的取值,會把全部的值都取到
③能夠節省內存空間,迭代器並不會在內存中佔用一大塊內存,而是隨着循環每次生成一個