Python笔记四(迭代器和生成器)

一、迭代器

如何从列表、字典中取值的:
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(加序号)

猜你喜欢

转载自www.cnblogs.com/xingye-mdd/p/8955909.html