生成器总结:

语法上和函数类似:生成器函数和常规函数几乎是一样的。它们都是使用def语句进行定义,差别在于,生成器使用yield语句返回一个值,而常规函数使用return语句返回一个值。

自动实现迭代器协议:对于生成器,Python会自动实现迭代器协议,以便应用到迭代背景中,(如for循环,sum函数)。由于生成器自动实现了迭代器协议,所以,我们可以调用它的next方法,并且,在没有值可以返回的时候,生成器自动产生StopIteration异常

状态挂起:生成器使用yield语句返回一个值。yield语句挂起该生成器函数的状态,保留足够的信息,以便之后从它离开的地方继续执行

优点一:生成器的好处是延迟计算,一次返回一个结果。也就是说,它不会一次生成所有的结果。这对于大数据量处理,将非常有用。

#列表解析
print(sum([i for i in range(100)]))#占用内存大,机器容易卡死
#生成器表达式
print(sum(i for i in range(100)))#几乎不占内存
def xiadan():
for i in range(10000):
yield '鸡蛋%s'%i #
alex_lmj = xiadan()
for jidan in alex_lmj:
print(jidan)

优点二:

生成器还能有效提高代码可读性

def xiadan():
ret=[]
for i in range(100):
ret.append('鸡蛋%s'%i)
return ret def xiadan():
for i in range(10000):
yield '鸡蛋%s'%i

最新文章

  1. C# Enum,Int,String的互相转换
  2. JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址
  3. PHP截取中文无乱码函数——cutstr
  4. Struts2中关于"There is no Action mapped for namespace / and action name"的总结
  5. 阿里云 SWAP
  6. null&this&super&向上转型
  7. JSP使用JDBC ODBC 实例
  8. em换算px
  9. nant build
  10. IIS安装教程
  11. HDU 4267 A Simple Problem with Integers(树状数组区间更新)
  12. Python正则表达式返回首次匹配到的字符及查询的健壮性
  13. 伺服电机&旋转变压器&光电编码器
  14. 第八篇 Flask配置
  15. C++中关于字符串的一些API
  16. 第213天:12个HTML和CSS必须知道的重点难点问题
  17. RSA加密算法详解(一)
  18. javascript封装animate动画
  19. MyBatis使用示例
  20. Spring mvc的web.xml配置详解

热门文章

  1. c/c++头文件的摘抄
  2. 201771010113 李婷华 《面向对象程序设计(java)》
  3. 【Hadoop离线基础总结】HDFS入门介绍
  4. android的布局 (如何实现空心圆效果的布局)
  5. quartus ii FFT核使用
  6. [java作业]Fan、求直线交点、Triangle2D、选课
  7. [hdu5448 Marisa’s Cake]多边形面积,公式化简
  8. [hdu5400 Arithmetic Sequence]预处理,容斥
  9. JS理论--正则表达式RegExp的创建、元字符、优先度、方法(test(),exec(),match(),replace())
  10. Unity接入友盟分享遇到的坑