Python学习之 ---生成器+生成器函数

本文详细介绍了Python中的生成器,包括生成器对象的特性、生成器函数的执行流程、yield语句的作用,以及生成器在无限循环、斐波那契数列和协程中的应用。重点讲解了yield from语法,它简化了生成器的实现。
摘要由CSDN通过智能技术生成

生成器★★★★

在这里插入图片描述
知识导图

生成器generator

● 生成器指的是生成器对象,可以由生成器表达式得到,也可以使用yield关键字得到一个生成器函数,调用这个函数得到一个生成器对象
● 生成器对象,是一个可迭代对象,是一个迭代器
● 生成器对象,是延迟计算、惰性求值的

生成器函数
●函数体中包含yield语句的函数,就是生成器函数,调用后返回生成器对象.

生成器函数

def inc():
    for i in range(5):
        yield i  #暂停函数执行 ,返回yield 的值
type(inc)       
>>> function
type(inc())
>>>generator  #生成器对象
g= inc() 
next(g)# 求解下一个数,  

普通函数调用,函数会立即执行直到执行完毕.
生成器函数调用,并不会立即执行函数体,而是需要使用next函数驱动生成器执行

def gen():
    print(11111)
    yield 1
    print(22222)
    yield 2
    print(33333)
    return 3   #一般不写return  这里只做测试 
    yield 
g=gen()
next() 

当打印完3333后,碰到return 3 ,后面的语句不在执行,所以会抛StopIteration ,生成器停止,便不能在继续执行.把yield 表达式的值返回
再次执行会执行到下一个yield语句又会停止执行
return 语句 后面的语句不在执行

生成器的执行

● 在生成器函数中,可以多次yield,每执行一次yield后会暂停执行,把yield表达式的值返回
● 再次执行会执行到下一个yield语句又会暂停执行
● return语句依然可以终止函数运行,但return语句的返回值不能被获取到
● return会导致当前函数返回,无法继续执行,也无法继续获取下一个值,抛出StopIteration异常
● 如果函数没有显式的return语句,如果生成器函数执行到结尾(相当于执行了return None),一样会抛出StopIteration异常

生成器函数
● 包含yield语句的生成器函数调用后,生成 生成器对象 的时候,生成器函数的函数体不会立即执行
● next(generator) 会从函数的当前位置向后执行到之后碰到的第一个yield语句

  • 4
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值