所谓的协同程序就是可以运行的独立函数调用,函数可以暂停或者挂起,并在需要的时候从程序离开的地方继续或者重新开始。
参考地址: https://fishc.com.cn/forum.php?mod=viewthread&tid=56023&extra=page%3D1%26filter%3Dtypeid%26typeid%3D403
演示
def myGen():
print("生成器被执行了")
yield(1)
yield(2)
myG = myGen()
print(next(myG))
print(next(myG))
print(next(myG)) # 最后这行 会提示报错 StopIteration
--------------------
生成器被执行了
1
2
StopIteration
def myGen():
print("生成器被执行了")
yield(1)
yield(2)
for item in myGen():
print(iyem)
---------------------
1
2
def libs():
a = 0
b = 1
while True:
a, b = b, a + b
yield a
for each in libs():
if each > 100:
break
print(each, end = " ")
--------------------------------
1 1 2 3 5 8 13 21 34 55 89
列表推导式 [ ]
在空数组符号中使用 for 循环 就是推导式
# 能被2 和 3 整除
temp = [ i for i in range(100) if not( i % 2 ) and not( i % 3 ) ]
print(temp)
-----------------
[0, 6, 12, 18, 24, 30, 36, 42, 48, 54, 60, 66, 72, 78, 84, 90, 96]
字典推导式 { : }
字典 要有引号的才是字典
能被2 整除的 返回 True 否则 返回 False
b = {i:i % 2 == 0 for i in range(10)}
print(b)
-------------------------
{0: True, 1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False}
集合推导式 { , }
集合 要有逗号, 集合的特点是返回不重复的 值
temp2 = { i for i in [1,2,3,4,5,4,5,4,5,85,22,1,5,44,2,655] }
print(temp2)
----------------------
{1, 2, 3, 4, 5, 44, 655, 85, 22}
生成器推导式( )
生成器推导式 如果做成 函数的参数
e = ( i for i in range(10))
print(next(e))
print(next(e))
print(next(e))
print(e) # 这里会提示报错 Object
for each in e:
print(each, end =" ")
---------------------------
0
1
2
<generator object <genexpr> at 0x00AA25A0>
3 4 5 6 7 8 9
100 的数据能被2 整除的 加起来 sum() 是个加法 函数
data = sum( i for i in range(100) if i % 2)
print(data)
------------------------
2500
data = sum( (i for i in range(100) if i % 2) )
print(data)
------------------------
2500