python生成器

本文详细介绍了Python中的生成器,包括如何通过生成器函数和推导式创建生成器,以及如何调用和使用生成器。对比了yield与range的区别,并强调了生成器在内存效率和分段执行上的优势。此外,还讲解了send方法,展示了如何在生成器运行过程中传递数据。
摘要由CSDN通过智能技术生成

目录

 什么是生成器

获取生成器的方法

1、通过生成器函数

2、通过各种推导式来实现生成器

怎么调用生成器

yield与range的区别

生成器的好处

send方法


 

什么是生成器

在Python中,一边循环一边计算的机制,称为生成器:generator。但是它的本质还是迭代器。在python中是基于函数的形式变成的。

获取生成器的方法

1、通过生成器函数

通过生成器函数与自定义函数类似,都是需要将range换成yield,表示产生。在使用生成器时,也与常规调用函数不同,是在函数名的后面加上.__next__()。与调用迭代器方法一样。在获取时可以通过for循环获取内部的元素

def 函数名():
    yielr 生成值
def function():
    yield 1  # 生成第一个值
    yield 2  # 生成第二个值

 

2、通过各种推导式来实现生成器

有关通过推导式生成一个生成器的详情看下面链接

python推导式_HHYZBC的博客-CSDN博客https://blog.csdn.net/HHYZBC/article/details/123620545

怎么调用生成器

直接调用函数名时,生成器函数是不会运行的,必须先将函数名加括号赋值给另一个变量,表示获取生成器

def function():
    yield 1  # 第一个值
    yield 2  # 第二个值


a = function()  # 获取生成器
print(a.__next__())  # 输出内容为1
print(a.__next__())  # 输出内容为2

也可以使用for循环进行迭代获取生成器。生成器本质上还是迭代器。

yield与range的区别

range表示返回某个值,在函数内部中遇到会直接停止这个函数,可以出现多次,但是只会执行到第一次遇到的位置。而yield是表示产生某个值,可以出现多次,但是它是分段运行函数,每次遇到yield时都会停止运行,直到再次使用.__next__()方法时会进行运行下一段函数。

生成器的好处

因为本质是迭代器,所以迭代器有的好处生成器都有。

send方法

格式:

生成器.send(数据)

例子:

def function():
    for i in range(1, 11):  # 循环生成1到10
        a = yield str(i)  # 将生成器的值赋值给a
        print(a)  # 打印a


a = function()  # 获取生成器
print(a.__next__())  # 打印第一次
print(a.__next__())  # 打印第二次
print(a.send('a'))  # 打印第三次并修改此时生成器的值
print(a.__next__())  # 打印第四次

 watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBASEhZWkJD,size_20,color_FFFFFF,t_70,g_se,x_16

 我个人的理解是修改上一次生成器的值。

第一次使用生成器生成1,然后由于遇到yield,使用生成器暂停运行

第二次使用生成器将第一次生成器的值赋值给a并打印,此时打印为None,然后进入第二次循环生成2,遇到yield,使用生成器暂停运行

第三次使用生成器由于send将a赋值给第二次生成器的值并打印变量a,此时变量a为a,然后进入第三次循环生成3,遇到yield,使用生成器暂停运行

第四次使用生成器将上一次生成器的值赋值给变量a并打印,此时为None,然后进入第四次循环生成4,遇到yield,使用生成器暂停运行。

以上是我个人理解,如果有错误欢迎大佬们指出。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HHYZBC

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值