标签:stop 简洁 超过 空间 转换 调用 for循环 one div
列别生成式:使代码更简洁
>>> [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
标签:stop 简洁 超过 空间 转换 调用 for循环 one div
原文地址:http://www.cnblogs.com/xiaobai005/p/7966583.html