Python中yield返回生成器的方法是什么

发布时间:2021-11-03 17:13:18 作者:iii
来源:亿速云 阅读:137

这篇文章主要讲解了“Python中yield返回生成器的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Python中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学习交流群:531509025
# 学习另外一个例子
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中yield返回生成器的方法是什么”的内容了,经过本文的学习后,相信大家对Python中yield返回生成器的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是亿速云,小编将为大家推送更多相关知识点的文章,欢迎关注!

推荐阅读:
  1. python里的生成器--yield
  2. python中yield指的是什么

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python yield

上一篇:HACMP的cluster.log报错该怎么办

下一篇:usbcleaner解除写保护功能怎么用

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》