本篇文章小编给大家分享一下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 方法。
TPLink TLWDR4320 无线路由器IP带宽控制功能分配带宽设置方法
SQL Server 2008及更高版本数据库恢复做法之日志尾部备份实用指南
TPLink TLWDR4320 无线路由器控制管控小孩上网行为设置
TPLink TLWDR4320 无线路由器打印服务器设置指南
TPLink TLWDR8620 52 无线路由器当作交换机使用教程
TPLink TLWDR8620 52 无线路由器映射服务器到外网操作方法