python3中的yield用法
yield跟return用法相似,yield返回迭代器,遍历返回的迭代器时,程序先截止于yield,下次遍历会接着上次程序同级继续运行,并在最后一次遍历不会在yield截止程序,会继续运行;return返回某个值,程序不再往下运行。
首先来看一段不含yield的代码:
class yield_test(object):
def test1(self):
for i in range(5):
i += 1
print("now i is:",i)
# yield i
for test1_i in range(i):
print("i in test1 is:",test1_i)
return i
bb = yield_test()
# bb.test1()
print(bb.test1())
执行结果:
now i is: 1
i in test1 is: 0
now i is: 2
i in test1 is: 0
i in test1 is: 1
now i is: 3
i in test1 is: 0
i in test1 is: 1
i in test1 is: 2
now i is: 4
i in test1 is: 0
i in test1 is: 1
i in test1 is: 2
i in test1 is: 3
now i is: 5
i in test1 is: 0
i in test1 is: 1
i in test1 is: 2
i in test1 is: 3
i in test1 is: 4
5
Process finished with exit code 0
上面执行结果可以看到,没有yield时,程序内的for循环全部执行完成了,最后数字5是return返回的值。
再来看一段含yield的代码:
class yield_test(object):
def test1(self):
for i in range(5):
i += 1
print("now i is:",i)
yield i
for test1_i in range(i):
print("i in test1 is:",test1_i)
return i
bb = yield_test()
# bb.test1()
print(bb.test1())
print(next(bb.test1()))
执行结果:
<generator object yield_test.test1 at 0x7f376477cdb0>
now i is: 1
1
可以看到,这次的for循环只执行了yield i上面的语句就停住了,最后那个数字1是yield i返回的值,如果要后面的循环继续执行,需要从这个迭代器里面取出一个值,才能继续,就像下面这样:
class yield_test(object):
def test1(self):
for i in range(5):
i += 1
print("now i is:",i)
yield i
for test1_i in range(i):
print("i in test1 is:",test1_i)
# return i
bb = yield_test()
# bb.test1()
print(bb.test1())
# print(next(bb.test1()))
for i in bb.test1():
# print("now i is:",i)
continue
执行结果:
<generator object yield_test.test1 at 0x7fb29b28cdb0>
now i is: 1
i in test1 is: 0
now i is: 2
i in test1 is: 0
i in test1 is: 1
now i is: 3
i in test1 is: 0
i in test1 is: 1
i in test1 is: 2
now i is: 4
i in test1 is: 0
i in test1 is: 1
i in test1 is: 2
i in test1 is: 3
now i is: 5
i in test1 is: 0
i in test1 is: 1
i in test1 is: 2
i in test1 is: 3
i in test1 is: 4
Process finished with exit code 0
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本