Python基础入门学习笔记 049 乱入:生成器

发布时间 2023-08-23 11:09:28作者: 一杯清酒邀明月

所谓协同程序,就是可以运行的独立函数调用,函数可以暂停或者挂起,并在需要的时候从程序离开的地方继续或者重新开始。

生成器可以暂时挂起函数,并保留函数的局部变量等数据,然后在再次调用它的时候,从上次暂停的位置继续执行下去。

一个函数中如果有yield语句,则被定义为生成器。

实例1:

 1 >>> def myGen():
 2     print("生成器被执行了!")
 3     yield 1   #暂停一次,相当于return,返回1
 4     yield 2     #暂停一次,相当于return,返回2
 5 
 6     
 7 >>> myG = myGen()
 8 >>> next(myG)
 9 生成器被执行了!
10 1
11 >>> next(myG)
12 2

像前面介绍的斐波那契的例子,也可以用生成器来实现:

 1 >>> def fibs():
 2     a = 0
 3     b = 1
 4     while True:
 5         a,b = b,a + b
 6         yield a
 7 
 8         
 9 >>> for each in fibs():
10     if each > 100:
11         break
12     print(each)

1
1
2
3
5
8
13
21
34
55
89

列表推导式表达:

100以内,能被2整除,但不能被3整除的所有整数

1 >>> a = [i for i in range(100) if not (i % 2) and (i % 3 )]
2 >>> a
3 [2, 4, 8, 10, 14, 16, 20, 22, 26, 28, 32, 34, 38, 40, 44, 46, 50, 52, 56, 58, 62, 64, 68, 70, 74, 76, 80, 82, 86, 88, 92, 94, 98]

字典推导式:

10以内是否为偶数

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

集合推导式:

1 >>> a = {i for i in [1,2,3,3,4,5,5,5,6,7,7,8]}
2 >>> a
3 {1, 2, 3, 4, 5, 6, 7, 8}

元组生成器推导式:

1 >>> e = (i for i in range(5))
2 >>> next(e)
3 0
4 >>> next(e)
5 1
6 >>> next(e)
7 2