生成器:理解为一种数据类型,自动实现了迭代器协议(已经包含了__iter__,可以直接用next方法):

生成器函数:使用yield语句而不是return语句,yield一次返回一个结果,没个结果中间挂起函数状态,以便下次继续执行

生成器表达式:把列表解析 []改成()就变成生成器表达式,更省内存

 

  1. l=[1,2,3,4,5]
  2. res=l.__iter__().__next__()

 

 

  1. def test():
  2. yield 1
  3. yield 2 #相当于return但是能返回多次,生成器函数
  4. yield 3
  5. g=test()
  6. print(g)
  7. print(g.__next__())
  8. print(g.__next__())
  9. print(g.__next__())
  10. print(\'$\'*44)
  11. name=\'abc\'
  12. res=\'sb\' if name ==\'sxs\' else \'sxj\'#三元表达式 如果T则返回sb 如果F 则返回sxj
  13. print (res)
  14. print(\'#\'*44)
  15. egg=[]
  16. for i in range(10):
  17. egg.append("鸡蛋%s"%i)
  18. print (egg)
  19. print(\'^\'*55)
  20. #列表解析
  21. egg2=[\'鸭蛋%s\'%i for i in range(10)]
  22. egg3=[\'鸭蛋%s\'%i for i in range(10) if i > 5 ]
  23. print(egg2)
  24. print(egg3)
  25. print(\'*\'*55)
  26. jiji=(\'鸟蛋%s\'%i for i in range(10))#生成器表达式
  27. print(jiji)
  28. print(jiji.__next__())
  29. print(jiji.__next__())
  30. print(jiji.__next__())
  31. print(next(jiji))

 

 

 

  1. print(sum(i for i in range(101))) #生成器表达式

 

版权声明:本文为python1988原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/python1988/p/10171089.html