晦涩的生成器yield

什么是生成器/strong>
书上说:函数使用yield可以定义生成器对象,那么包含yield的函数主是一个生成器函数,它可以生成一个序列,方便迭代中使用,__next__()#python3中的特殊方法,应该避免使用特殊方法,next(c)使用内置函数next()即可。
def countdown(n): print("Counting down from %s" % n) while n > 0: yield n n -= 1 returnc = countdown(10)print(c.__next__())#python3中的特殊方法,应该避免使用特殊方法print(next(c))#使用内置函数next()for i in c : print(i,end=' ')
函数对象调用.__next__()函数时开始执行语句,遇到yield语句时停止。可以使用循环来操作生成器。 调用close()方法关闭未使用完的生成器。 那么问题来了,yield到底是什么/p>
我们把上边的代码稍加变化:
def countdown1(n): print("Counting down from %s" % n) while n > 0: yield n*n n -= 1 returnc = countdown1(10)print(next(c))print(next(c))print(next(c))for i in c : print(i,end=' ')
运行之后我们可以发现程序运行到yield的时候返回了一个值,那么yield和return在功能上有些相似。
生成器表达式
如果你对列表推导有些了解,你会发现,生成器表达式只不过是把列表的[]换成了元组的(),但列表推导返回的是一个结果集,而生成器表达式返回的是一个生成器。 因为这个特点,我们可以通过流方式访问一个巨大的文件而不必把它直接加载到内存,这样很大的提高了程序的性能。
代码如下:
print('')print("生成器表达式:")b = (x*x for x in range(10) if (x % 2 ==0))print(next(b))print(next(b))for i in b : print(i, end=' ')
【专业Python IDE推荐】——PyCharm (正版低至¥1068):
PyCharm 是一款Python IDE,其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外,该IDE提供了一些高级功能,以用于Django框架下的专业Web开发。
PyCharm基础教程推荐:
- PyCharm入门第一步(一)——创建并运行第一个Python项目
- PyCharm入门第一步(二)——调试第一个Python应用程序
- PyCharm入门第一步(三)——测试第一个Python应用程序
- PyCharm入门第一步(四)——创建和运行第一个Django项目
想要购买正版授权,或者获取更多PyCharm相关信息的朋友可以点击” 咨询在线客服 “~
标签:开发工具PythonIDE
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!