python函数 - 16 生成器函数

生成器

1.什么是生成器

比较下面:value遍历的数据全部存在numbers中,不需要的数据也会产生; 
        而aa是一个生成器,需要数据的时候才生成.
numbers = [value for value in range(1, 20)]
print(numbers)

这里的aa就是一个生成器
aa = (value for value in range(1, 20))   
print(aa)

总结: a.生成器产生的一个数据,生成算法,产生的数就没有用.
      b.生成器就是保存产生数据的算法,在使用的时候一个一个的产生相应的数据.
      c.产生的过程与母鸡下蛋的过程一样.对产生的数据不会再产生.

2.通过__next__去拿到生成的每一个数.

aa = (value for value in range(1, 20))   
print(aa)
print(aa.__next__())  #>>>1
print(aa.__next__())  #>>>2
print(aa.__next__())  #>>>3
print(aa.__next__())  #>>>4
print(aa.__next__())  #>>>5
当我们需要使用数据的时候才产生一个数据

aa = (value for value in range(1, 20))   
print(aa)
print(aa.next())  #>>>1
print(aa.next())  #>>>2
print(aa.next())  #>>>3
print(aa.next())  #>>>4
print(aa.next())  #>>>5   #前面拿了5个数.

for x in aa:
print(x)   #这里从6开始产生,前面产生的5个数不再产生
总结:生成器generator保存产生数据的算法,每次只产生一个数据,并且已经产生后的数据不会再重复产生.

3.yield关键字

a.yield是在函数里面用的

b.执行yield语句,就会将yield后面的值缓存起来

c.函数结束后返回一个生成器,生成器可以生产的数据就是之前通过yield缓存的数据

d.yield是一个用法跟return很相似的关键字,不同在于函数返回的是一个生成器

def foo(n):
    for x in range(1, n):
        yield x     #>>>1, 2, 3, 4
    return 100
aa = foo(5)
print(aa)
for i in aa:
    print(i)
例如:斐波拉契数列:1, 1, 2, 3, 5, 8, 13, 21, 33
def sequence(n):
    num_1 = 0
    num_2 = 1
    for x in range(1, n+1):
        yield num_2    
        #yield相当于一个容器,缓存数据 ,让yield缓存到的数据去创建
        一个生成器,可以生产缓存到的数据的生成器,并且返回.  
        # print(num_2)
        num_1,num_2 = num_2, num_1 + num_2
aa = sequence(10)
print(aa.__next__())
for x in aa:
    print(x)

numbers = list(sequence(10))  #将生成器转换成列表
print(numbers)

总结:
如果函数中有yield关键字,那么函数返回值就是generator类型
使用范围:通过算法拿到这个数据,不是别人产生的数据拿来用的时候.


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值