Python学习之路:生成器
Posted Py小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python学习之路:生成器相关的知识,希望对你有一定的参考价值。
列别生成式:使代码更简洁
>>> [i*2 for i in range(10)] [0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
生成器是为了节省内存空间,生成器在调用的时候才会生成相应的数据,不调用的时候只是分配内存;
只有一个__next__()方法。2.7里是next()
生成器不可用切片的方式取;
>>> b =( i*2 for i in range(10)) >>> b <generator object <genexpr> at 0x103e5dd00>
>>> b.__next__() 0 >>> b.__next__() 2 >>> b.__next__() 4
generator非常强大,如果推算的算法比较复杂,用类似列表生成式的for循环无法实现的时候,还可以用函数来实现。
Fibonacci数列:
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)
函数生成式及异常信息提醒def fib(max) n,a,b=0,0,1
while n < max: #print(b) yield b #转换成生成器 a,b=b,a+b n=n+1 return ‘done‘#如果下面程序中next超过max范围,会报错,提示异常 f=fib(100) print(f.__next__()) print("========")#可以让函数中断,之后继续 print(f.__next__()) print(f.__next__()) print(f.__next__()) print(f.__next__()) print(f.__next__()) print(f.__next__()) print(f.__next__()) print(f.__next__()) print(f.__next__()) print("=====start loop ======") for i in f: print(i) #抓住异常 g=fib(6) while True: try: x=g.__next__() print(‘g:‘,x) except StopIteration as e:
print(‘Generator return value:‘,e.value)
break
以上是关于Python学习之路:生成器的主要内容,如果未能解决你的问题,请参考以下文章