Python--31 生成器:yield

it2022-05-11  55

生成器

  生成器就是迭代器的一种实现,生成器的发明使得python更为简洁

  迭代器需要我们去定义一个类和实现相关方法,才可以定义一个灵活的迭代器。生成器只需要在一个普通的函数加入yield

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

  生成器就是一个特殊的函数,调用可以中断可以暂停,暂停之后把控制权临时交出来,在需要的时候可以获取回来继续执行

>>> def myGen(): ... print('生成器') ... yield 1 ... yield 2 ... >>> myG = myGen() >>> next(myG) 生成器 1 >>> next(myG) 2 >>> next(myG) Traceback (most recent call last): File "<stdin>", line 1, in <module> StopIteration >>> for i in myGen(): ... print(i) ... 生成器 1 2

生成器实现fibs数列

>>> def fibs(): ... a = 0 ... b = 1 ... while True: ... a ,b = b, a + b ... yield a ... >>> for each in fibs(): ... if each > 100: ... break ... print(each) ... 1 1 2 3 5 8 13 21 34 55 89

列表推导式

>>> a = [i for i in range(100) if not(i % 2) and i % 3] >>> a [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]

字典推导式

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

集合推导式

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

生成器推导式

>>> e = (i for i in range(10)) >>> e <generator object <genexpr> at 0x7f12d1ffdd58> >>> next(e) 0 >>> next(e) 1 >>> sum(i for i in range(100) if i % 2) 2500

 

转载于:https://www.cnblogs.com/fengjunjie-w/p/7519641.html


最新回复(0)