python-迭代器与生成器1
迭代器与生成器
列表的定义
列表生成式:作用使代码更加简洁
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。
而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面
几个元素,那后面绝大多数元素占用的空间都白白浪费了。
所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续
的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边
计算的机制,称为生成器:generator。
a=[1,2,3] print(a) a=[i*2 for i in range(10)] #也可以是传一个函数[fun for i rang(10)] print(a) #其他方式来完成: a=[] for i in range(10): a.append(i*2) print(a) 打印结果 [1, 2, 3] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18] 生成器:只有在调用时才会生成相应的数据,调用哪次就参生哪次。 只记录当前位置 只有一个方法_next_();2.7版本用netx(); (i*i for in in range(10)) 例1:斐波那契 def fib(max): n,a,b=0,0,1 while n<max: print(b) a,b=b,a+b n=n+1 return "----done______" fib(10) 打印结果 ------------------ 1 1 2 3 5 8 13 21 34 55 例2 斐波那契 def fib(max): n,a,b=0,0,1 while n<max: print(b) #yield b a,b=b,a+b #t=(b,a+b) 是一个tuple n=n+1 return "----done______" fib(10) 打印结果 ------------------ 1 1 2 3 5 8 13 21 34 55 例3:生成器 def fib(max): n,a,b=0,0,1 while n<max: #print(b) yield b a,b=b,a+b #t=(b,a+b) 是一个tuple n=n+1 return "----done______" #print(fib(10)) f=fib(10) print(f.__next__()) print(f.__next__()) 打印结果 ------------------ 1 1 例4: def fib(max): n,a,b=0,0,1 while n<max: #print(b) yield b a,b=b,a+b #t=(b,a+b) 是一个tuple n=n+1 return "----done______" #print(fib(10)) f=fib(10) print(f.__next__()) print(f.__next__()) print("=======”"开始 ") 打印结果 -------------- 1 1 =======开始 2 3 5 8 13 21 34 55