python生成器到底有什么优点?

 我来答
阿qi弃jwcytbb8328
2017-11-01 · TA获得超过269个赞
知道小有建树答主
回答量:304
采纳率:96%
帮助的人:78.6万
展开全部

在Python这门语言中,生成器毫无疑问是最有用的特性之一。与此同时,也是使用的最不广泛的Python特性之一。究其原因,主要是因为,在其他主流语言里面没有生成器的概念。正是由于生成器是一个“新”的东西,所以,它一方面没有引起广大工程师的重视,另一方面,也增加了工程师的学习成本,最终导致大家错过了Python中如此有用的一个特性。

1. 迭代器协议

由于生成器自动实现了迭代器协议,而迭代器协议对很多人来说,也是一个较为抽象的概念。所以,为了更好的理解生成器,我们需要简单的回顾一下迭代器协议的概念。

迭代器协议是指:对象需要提供next方法,它要么返回迭代中的下一项,要么就引起一个StopIteration异常,以终止迭代

可迭代对象就是:实现了迭代器协议的对象

协议是一种约定,可迭代对象实现迭代器协议,Python的内置工具(如for循环,sum,min,max函数等)使用迭代器协议访问对象。

举个例子:在所有语言中,我们都可以使用for循环来遍历数组,Python的list底层实现是一个数组,所以,我们可以使用for循环来遍历list。

2. 生成器

Python使用生成器对延迟操作提供了支持。所谓延迟操作,是指在需要的时候才产生结果,而不是立即产生结果。这也是生成器的主要好处。

Python有两种不同的方式提供生成器:

生成器函数:常规函数定义,但是,使用yield语句而不是return语句返回结果。yield语句一次返回一个结果,在每个结果中间,挂起函数的状态,以便下次重它离开的地方继续执行

生成器表达式:类似于列表推导,但是,生成器返回按需产生结果的一个对象,而不是一次构建一个结果列表

4. 使用生成器的注意事项

5. 总结

本文深入浅出地介绍了Python中,一个容易被大家忽略的重要特性,即Python的生成器。为了讲解生成器,本文先介绍了迭代器协议,然后介绍了生成器函数和生成器表达式,并通过示例演示了生成器的优点和注意事项。在实际工作中,充分利用Python生成器,不但能够减少内存使用,还能够提高代码可读性。掌握生成器也是Python高手的标配。希望本文能够帮助大家理解Python的生成器。

猴41631涸墒36
2017-11-01 · TA获得超过460个赞
知道答主
回答量:304
采纳率:100%
帮助的人:85.3万
展开全部

最近正在学python,感觉这语言不错,之前是做PHP的,现在自学了半个月了!以我自己对生成器的理解,能说的就以下3点,如果不对还请高手指正,毕竟现在还是个python小白:

1、节省资源消耗,和声明序列不同的是生成器在不使用的时候几乎不占内存,也没有声明计算过程!

2、使用的时候,生成器是随用随生成,用完即刻释放,非常高效!

3、可在单线程下实现并发运算处理效果,非常牛逼,这点不可小视,看看nginx epoll单线程承载的并发量比多线程还效率高很多,最底层就是这个原理!

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
燕魅仙里菜8257
2017-11-01 · TA获得超过353个赞
知道答主
回答量:294
采纳率:95%
帮助的人:61.9万
展开全部

1、主要是开发快,语言简洁,没那么多技巧,所以读起来很清楚容易。

2、C/C++可以写python的module,标准库里就有用C/C++写的东西,这个跟java的JNI类似。

3、python的gui一般是用tkinter,就是tk的python的wrapper。python没有像xna那么方便的工具。

4、python不是为了网络设计的。python是1991年有的,WWW是1993年才被CERN开放的。网络编程用python主要是为了开发快。

5、像VS那样功能强的IDE,有要钱的PyCharm和不要钱的PyDev。PyDev有Eclipse的插件版本或者是Aptana Studio版本。

本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式