迭代器

迭代器歸納:
迭代器:
雙下方法:帶雙下劃線的方法,不多直接調用的方法,通常狀況下經過其餘語法觸發
可迭代的——可迭代協議,含有__iter__的方法(dir()方法能夠顯示數據相關方法)
判斷方法:if '__iter__' in dir(數據)
可迭代的必定能夠被for循環
迭代器協議:含有__iter__和__next__方法
迭代器必定是可迭代的,可迭代的能夠經過調用.__iter__()方法獲得一個迭代器
迭代器的特色:
方便使用,且只能取全部的數據取一次
節省內存空間
# 迭代器# 迭代器的概念# 只要含有__iter__方法的都是可迭代的  ——  可迭代協議(python規定)# 迭代器協議  ——>  內部含有__next__ 和 __iter__方法的就是迭代器# 迭代器的好處    # 從容器類型中一個一個的取值,會把全部的值都取到    # 節省內存空間    # range  # f        # 迭代器並不會在內存中再佔用一大塊內存,        # 而是循着循環,每次生成一個        # 每次next每次給我一個# print(list(range(10)))# 能夠被for循環的都是可迭代的# 可迭代的內部都有__iter__方法# 只要是迭代器必定能夠迭代# 可迭代的.__iter__方法就能夠獲得一個迭代器# 迭代器中的__next__()方法能夠一個一個的獲取值# for循環其實就是在使用迭代器# iterator  print([].__iter__())    <list_iterator object at 0x000001D18F12FCF8># 應該有的值可是看着沒那麼多,猜想應該是迭代器     print(range(10))# 直接給你內存地址# for# 只有 是可迭代對象的時候,才能用for# 當咱們遇到一個新的變量,不肯定它是否是可迭代對象時,就判斷它是否可迭代# 帶兩個下劃線的方法叫    雙下方法# print([1].__add__([2]))# print([1]+[2])# lst=[1,2,3,4]# 索引取值# 循環取值# 可循環的數據類型# list# tuple# dic# str# set# f = open()# range()# enumerate([])   枚舉# print(dir([]))     # 顯示此數據類型擁有的方法# ret = set(dir([]))&set(dir({}))&set(dir(str))# print(ret)################################################################33# print('__iter__' in dir(int))# print('__iter__' in dir(bool))# print('__iter__' in dir(str))# print('__iter__' in dir(list))# print('__iter__' in dir(tuple))# print('__iter__' in dir(dict))# print('__iter__' in dir(enumerate([])))# 只要是能被for循環的數據類型,就必定擁有__iter__方法# print([].__iter__())# 一個列表執行了__iter__()方法以後的返回值就是一個迭代器# print(dir([]))# print(dir([].__iter__))# print(set(dir([].__iter__()))-set(dir([])))# print([1,'a'].__iter__().__length_hint__()) # 元素個數# l = [1,2,3]# iterator = l.__iter__()# print(iterator.__next__())# print(iterator.__next__())# print(iterator.__next__())# iterable  可迭代的 ——> __iter__   只要含有__iter__方法的都是可迭代的# [].__iter__()   迭代器  ——> __next__ 經過next就能夠從迭代器中一個一個的取值# 只要含有__iter__方法的都是可迭代的  ——  可迭代協議(python規定)# 迭代器協議  ——>  內部含有__next__ 和 __iter__方法的就是迭代器# print('__iter__' and '__next__' in dir([].__iter__()))from collections import Iterable     # 可迭代的from collections import Iterator    # 迭代器# print(isinstance([],Iterator))      # isinstance 判斷數據類型是否是這個東西# print(isinstance([],Iterable))# class A:#     def __iter__(self):pass#     def __next__(self):pass# a = A()# print(isinstance(a,Iterator))      # isinstance 判斷數據類型是否是這個東西# print(isinstance(a,Iterable))# l=[1,2,3,4]# for i in l:#     print(i)# for i in l.__iter__():#     print(i)# for 循環的本質# for i in l:#     pass# iterator = l.__iter__()# iterator.__next__()# 模仿for循環,將列表變成迭代器,用__next__()取下一個值# iterator=l.__iter__()# while True:#     print(iterator.__next__())#     # 最後會拋異常,由於最後沒有後__next__()報錯
相關文章
相關標籤/搜索