# Author Richard_Kong # !/usr/bin/env python # --*-- encoding:utf-8 --*-- """ 生成器:只有在调用的时候才会生成相应的数据 如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢,这样就不必创建 完整的list从而节省大量的内存空间,在python中,这样一边循环一边计算的机制叫生成器:generator """ b = [i*2 for i in range(10)] #这是一个列表 print(b) g = (i*2 for i in range(10)) #这是一个生成器 就是把list的中括号变为小括号 print(g) #打印的是一个内存地址 """ 生成器 只记住当前位置,没有previous 只有next 只能一个一个的走 但是 我们创建了生成器generator后,一般不会用next()方法来调用元素,而是用for循环,而且也不用 考虑stopIteration的异常 """ print(g.__next__()) print(g.__next__()) for n in g: print(n) """ 用函数做一个生成器: 非波拉且函数 """ def fib(max): """ yield:关键字的作用 yield关键字语句挂起该函数,并向调用者发送回一个值, 但是保留足够的状态以使得函数能够从它离开的地方继续 :param max: :return: """ n,a,b =0,0,1 while n<max: # print(b) # 想把函数变为生成器,就在输出的变量前加yield即可 """ 如果一个函数定义中包含yield关键字,那么次函数就不再是普通的函数,而是一个生成器 """ print("fib 函数 yield关键字执行之前") yield b # 调用next函数 就会执行到yield这里,发送给调用者一个值 print("fib 函数 yield关键字执行后") a,b =b,a+b n +=1 print("feibolaqie hanshu") f = fib(10) print(f.__next__()) print(f.__next__()) print(f.__next__()) print(f.__next__()) print("可以干点别的事儿") print("再回来",f.__next__()) for n in f: print("in for xunhuan") print(n)
python中的生成器
最新推荐文章于 2024-07-01 23:45:00 发布