所谓的协同程序就是可以运行的独立函数调用,函数可以暂停或者挂起,并在需要的时候从程序离开的地方继续或者重新开始。
参考地址: https://fishc.com.cn/forum.php?mod=viewthread&tid=56023&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403

演示

  1. def myGen():
  2. print("生成器被执行了")
  3. yield(1)
  4. yield(2)
  5. myG = myGen()
  6. print(next(myG))
  7. print(next(myG))
  8. print(next(myG)) # 最后这行 会提示报错 StopIteration
  9. --------------------
  10. 生成器被执行了
  11. 1
  12. 2
  13. StopIteration
  1. def myGen():
  2. print("生成器被执行了")
  3. yield(1)
  4. yield(2)
  5. for item in myGen():
  6. print(iyem)
  7. ---------------------
  8. 1
  9. 2
  1. def libs():
  2. a = 0
  3. b = 1
  4. while True:
  5. a, b = b, a + b
  6. yield a
  7. for each in libs():
  8. if each > 100:
  9. break
  10. print(each, end = " ")
  11. --------------------------------
  12. 1 1 2 3 5 8 13 21 34 55 89

列表推导式 [ ]

在空数组符号中使用 for 循环 就是推导式

  1. # 能被2 和 3 整除
  2. temp = [ i for i in range(100) if not( i % 2 ) and not( i % 3 ) ]
  3. print(temp)
  4. -----------------
  5. [0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96]

字典推导式 { : }

字典 要有引号的才是字典
能被2 整除的 返回 True 否则 返回 False

  1. b = {i:i % 2 == 0 for i in range(10)}
  2. print(b)
  3. -------------------------
  4. {0: True, 1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False}

集合推导式 { , }

集合 要有逗号, 集合的特点是返回不重复的 值

  1. temp2 = { i for i in [1,2,3,4,5,4,5,4,5,85,22,1,5,44,2,655] }
  2. print(temp2)
  3. ----------------------
  4. {1, 2, 3, 4, 5, 44, 655, 85, 22}

生成器推导式( )

生成器推导式 如果做成 函数的参数

  1. e = ( i for i in range(10))
  2. print(next(e))
  3. print(next(e))
  4. print(next(e))
  5. print(e) # 这里会提示报错 Object
  6. for each in e:
  7. print(each, end =" ")
  8. ---------------------------
  9. 0
  10. 1
  11. 2
  12. <generator object <genexpr> at 0x00AA25A0>
  13. 3 4 5 6 7 8 9

100 的数据能被2 整除的 加起来 sum() 是个加法 函数

  1. data = sum( i for i in range(100) if i % 2)
  2. print(data)
  3. ------------------------
  4. 2500
  5. data = sum( (i for i in range(100) if i % 2) )
  6. print(data)
  7. ------------------------
  8. 2500