一、迭代器
如何从列表、字典中取值的:
1)index索引 ,key,前提必须知道索引或key值才能取到对应的value
2)for循环
凡是可以使用for循环取值的都是可迭代的
可迭代协议 :内部含有__iter__方法的都是可迭代的
迭代器协议 :内部含有__iter__方法和__next__方法的都是迭代器
1 print(dir([1,2,3])) 2 #>>>['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'append', 'clear', 'copy', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'] 3 lst_iter = [1,2,3].__iter__() 4 print(lst_iter.__next__())#>>>1 5 print(lst_iter.__next__())#>>>2 6 print(lst_iter.__next__())#>>>3 7 8 #上面代码相当于for循环取值 9 for i in [1,2,3]: # 使用for循环时,在内部调用__iter__方法,变成迭代器。[1,2,3].__iter__() 10 print(i) 11 12 #使用while循环实现for循环的机制 13 l = [1,2,3] 14 lst_iter = iter(l) # iter(l)相当于l.__iter__(),都是产生一个迭代器 15 while True: 16 try: 17 print(next(lst_iter)) # next(lst_iter)相当于lst_iter.__next__() 18 except StopIteration: 19 break 20 21 # 什么是可迭代的 22 # 什么是迭代器 迭代器 = iter(可迭代的),自带一个__next__方法 23 # 可迭代 最大的优势 节省内存 24 25 #例:以下是python3运行的结果 26 from collections import Iterable,Iterator 27 print(range(100000000)) 28 print(isinstance(range(100000000),Iterable))#判断是不是可迭代的 29 print(isinstance(range(100000000),Iterator))#判断是不是迭代器 30 # >>>range(0, 100000000) 31 # >>>True 32 # >>>False 33 34 # python2 range 不管range多少 会生成一个列表 这个列表将用来存储所有的值 35 # python3 range 不管range多少 都不会实际的生成任何一个值 36 # 迭代器的优势: 37 # 节省内存 38 # 取一个值就能进行接下来的计算 ,而不需要等到所有的值都计算出来才开始接下来的运算 —— 快 39 # 迭代器的特性:惰性运算 40 41 #例 42 f = open() 43 for line in f:#用一行读一行 44 45 # 可迭代对象:列表 字典 元组 字符串 集合 range 文件句柄 enumerate(加序号)