最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Python中yield返回生成器代码方法
时间:2022-06-25 01:37:14 编辑:袖梨 来源:一聚教程网
本篇文章小编给大家分享一下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)
#
# 使用生成器
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 方法。
相关文章
- 宝可梦传说ZA挂机刷闪怎么刷-宝可梦传说ZA挂机刷闪方法介绍 11-03
- 洛克王国世界粉粉星果实如何搭配技能 11-03
- 赞美母亲的话 11-03
- 神宠降临第十关怎么全收集 11-03
- 三国望神州貂蝉怎么获取 11-03
- 三国群英传策定九州刘备阵容如何搭配 11-03