Python中yield返回生成器的详细方法

枫铃3年前 (2021-10-29)Python211

最简单、直观的认识,将 yield 看做 return 对待,只是 return 返回一个值,而 yield 返回一个生成器。

要理解 yield 的作用,必须理解生成器是什么?

在理解生成器之前,必须先理解迭代器。

一、迭代器

逐项读取列表,称为迭代。

mylist = [1, 2, 3]
for i in mylist: # 可迭代对象
    print(i)

列表解析式同样是一个迭代器。

mylist = [x*x for x in range(3)]
for i in mylist:
    print(i)
'''
0
1
4
'''

所有 for…in… 都是迭代器,包括列表、字符串、文件等等。

但是,迭代器所有的值都存储在内存中,十分浪费内存。

因此有了生成器的概念。

二、生成器

生成器是一种迭代器,这种迭代器只能迭代一次。

生成器不会一次性存储所有的值,而是会动态的生成值。

mygenerator = (x*x for x in range(3))
for i in mygenerator:
    print(i)

生成器只可执行一次,再次执行时不会输出任何东西。

三、yield

1.例子一

yield 类似于 return 关键字,只是函数将返回一个生成器。

# 创建生成器
def createGenerator():
    mylist = range(10)
    for i in mylist:
        print(i) # 验证函数调用时并无执行
        yield i*i
mygenerator = createGenerator()    
print(mygenerator) 
# <generator object createGenerator at 0x0000029E88FDCA50>

# 使用生成器
for i in mygenerator:
    print(i)

# 再次执行 返回为空 没有值了

函数将返回一组只需要读取一次的值,可以大大的提升代码性能。

在调用函数时,函数体中的代码并不会执行,函数只返回生成器对象。

代码每次从使用生成器时停止的地方继续。

2.例子二

'''
学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:531509025
寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
'''
# 学习另外一个例子
def foo():
    print("starting...")
    while True:
        res = yield 4 # 函数并不真正执行
        print("res:", res)

g = foo() # 得到一个生成器对象
print(next(g)) # 真正执行
print("*"*20)
print(next(g)) # 从上一次停止的地方继续执行
'''
starting...
4
********************
res: None
4
'''

print(g.send(7))

执行 yield 之后,才会跳出 while 循环。

  • next 函数用于执行下一步操作。

  • send 函数用于发送一个参数给生成器。且 send 方法中包含 next 方法。

结尾给大家推荐一个非常好的学习教程,希望对你学习Python有帮助!

Python基础入门教程推荐:更多Python视频教程-关注B站:Python学习者

【Python教程】全网最容易听懂的1000集python系统学习教程(答疑在最后四期,满满干货)

Python爬虫案例教程推荐:更多Python视频教程-关注B站:Python学习者

2021年Python最新最全100个爬虫完整案例教程,数据分析,数据可视化,记得收藏哦

相关文章

利用python同步windows和linux文件

写python脚本的初衷,每次在windows编辑完文件后,想同步到linux上去,只能够登录服务器,...

爬虫基本原理

爬虫基本原理 一、爬虫是什么? 百度百科和维基百科对网络爬虫的定义:简单来说爬虫就是抓取目标网站内容的工具,一般是根据定义的行...

Django 函数和方法的区别

函数和方法的区别 1、函数要手动传self,方法不用传 2、如果是一个函数,用类名去调用,如果是一个方法...

Django 知识补漏单例模式

单例模式:(说白了就是)创建一个类的实例。在 Python 中,我们可以用多种方法来实现单例模式&#x...

Django基础知识MTV

Django简介 Django是使用Python编写的一个开源Web框架。可以用它来快速搭建一个高性能的网站。 Django也是一个MVC框架。但是在Dj...

Python mysql 索引原理与慢查询优化

一 介绍 为何要有索引? 一般的应用系统,读写比例在10:1左右,而且插入操作和一般的更新操作很少出现性能问题,...

发表评论

访客

看不清,换一张

◎欢迎参与讨论,请在这里发表您的看法和观点。