栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python生成器和装饰器(Python生成器对象)

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python生成器和装饰器(Python生成器对象)

目录

什么是生成器

获取生成器的方法

1、通过生成器函数

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

怎么调用生成器

yield与range的区别

生成器的好处

send方法


什么是生成器

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

获取生成器的方法

1、通过生成器函数

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

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

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

怎么调用生成器

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

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


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

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__())  # 打印第四次

 

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

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

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

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

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

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/772887.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号