Python生成器

来源:互联网 发布:知乎语录 编辑:程序博客网 时间:2024/05/20 18:50
#author F#迭代器#列表生成式list_build = [2*i for i in range(0, 24)]  #2*i可以改成某函数print(list_build)# 相当于三行代码list_man_made = []for i in range(0, 24):    list_man_made.append(2*i)print(list_man_made)#生成器 : 只有在调用时候才会产生对应的数据  只记住当前的位置 只有一个__next__()方法# cc = [2*i for i in range(0, 24000000000)]'''c = ( 2*i for i in range(0, 24000000000)) #c存的是内存地址,存了一个算法,并没有将整个列表生成for i in c:    print(i)#生成器和列表的区别是:调用时候才有数据 不调用则没有数据 加快了运行时间print(c.__next__())'''#斐波那契数列#1,1,2,3,5,8,13,21,...def fib(max):    n, a, b = 0, 0, 1    while n<max:        print(b)        a, b=b, a+b        n = n+1    return 'done'##赋值语句 a,b=b,a+b 赋值过程# t = (b, a+b) #t是一个tuple# a=t[0]# b=t[1]fib(100)def fib1(max):    n, a, b = 0, 0, 1    while n<max:        yield b        a, b=b, a+b        n = n+1    return 'done'  #用for循环done不会打印print(fib1(10))f = fib1(10)print(f.__next__())print(f.__next__())print("干点别的事去")print(f.__next__())print(f.__next__())print("==start==")for i in f:    print(i)##函数有yield存在就回变成一个生成器 return的值用异常抓取def fib2(max):  #这个已经不是函数了  只要有yield存在 就不是函数了     n, a, b = 0, 0, 1    while n<max:        yield b        a, b = b, a+b        n = n+1    return "done"  #可以用来抛出异常g = fib2(6)while True:    try:        x = next(g)        print("g:",x)    except StopIteration as e:        print("Generator return value:", e.value)        break

原创粉丝点击