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学习之路:生成器的主要内容,如果未能解决你的问题,请参考以下文章

《Python学习之路 -- Python基础之切片》

基础篇D1 -- Python学习之路

Python学习之路一

python学习之路:生成器并行运算

Python学习之路 - yield生成器,迭代器

Python小白学习之路(二十二)—生成器