Python 生成器函数与 yield 语句
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了Python 生成器函数与 yield 语句,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2000字,纯文字阅读大概需要3分钟。
内容图文
![Python 生成器函数与 yield 语句](/upload/InfoBanner/zyjiaocheng/835/a26d343686004299b5c96a0d32e5ef85.jpg)
Python在处理函数中的yield语句时,返回yield语句所指定的对象/值,但不会终止当前函数的执行,而是暂时中断,保留当前的执行状态/上下文,等函数再次被调用时则接着上次yield语句继续执行,如遇到yield则再次中断并保留当前的执行状态/上下文,如此循环直到函数结束或遇到return语句时才产生一个StopIteration异常后退出。 因此包含yield语句的函数不再是普通函数,而是变成了一个生成器。
使用yield语句创建的生成器函数:
def letter_range(a,z):
while ord(a)<ord(z):
yield a
a=chr(ord(a)+1)
c1=letter_range('a','z')
c2=letter_range('a','z')
print("c1="+str(c1))
print("c2="+str(c2))
c1=<generator object letter_range at 0x00000173D41CC048> c2=<generator object letter_range at 0x00000173D41CC0C0>
上面例子的输出可以看出每次直接调用letter_range函数都会返回一个独立的生成器。
f=letter_range('a','z')
print(f.__next__())
print(f.__next__())
a b
上面代码中,通过把生成器函数赋值给f,然后通过引用f来调用生成器就可以实现迭代了。
下面的代码在yield语句后面加了一个return语句,然后我们再调用生成器,结果能清晰的反映包含yield语句函数的执行路径。
def letter_range(a,z):
while ord(a)<ord(z):
yield a
return 'over'
a=chr(ord(a)+1)
f=letter_range('a','z')
print(f.__next__())
print(f.__next__())
a
--------------------------------------------------------------------------- StopIteration Traceback (most recent call last) <ipython-input-102-33175d5529f1> in <module> 1 f=letter_range('a','z') 2 print(f.__next__()) ----> 3 print(f.__next__()) StopIteration: over
下面的例子可以看出,yield语句就相当于程序中的断点,每个yield语句中断一次。
def letter_range(a,z):
yield 'a'
yield 'b'
yield 'c'
f=letter_range('a','z')
print(f.__next__())
print(f.__next__())
print(f.__next__())
print(f.__next__())
a b c
--------------------------------------------------------------------------- StopIteration Traceback (most recent call last) <ipython-input-104-931315ae73c1> in <module> 7 print(f.__next__()) 8 print(f.__next__()) ----> 9 print(f.__next__()) StopIteration:
内容总结
以上是互联网集市为您收集整理的Python 生成器函数与 yield 语句全部内容,希望文章能够帮你解决Python 生成器函数与 yield 语句所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。