python生成器及应用场景

您所在的位置:网站首页 access中表达式生成器的使用场景 python生成器及应用场景

python生成器及应用场景

#python生成器及应用场景| 来源: 网络整理| 查看: 265

概念:

      生成器是一个特殊的程序,可以被用作控制循环的迭代行为,是一边循环一边计算的机制,称为generator 。

生成器是迭代器的一种,使用yield返回值函数,每次调用yield会暂停,而可以使用next()函数和send()函数恢复生成器。

使用场景:

        由于可以使用生成器很方便地实现一个迭代器,因此迭代器适用的场景生成器几乎都适用。

节省内存流式处理数据无限的数据 1.实现generator的两种方式 第一种方法:把一个列表生成式的[]改成(),就创建了一个generator #列表生成式 lis = [x*x for x in range(10)] print(lis) #生成器 generator_ex = (x*x for x in range(10)) print(generator_ex) # 结果: # [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] #

  创建list和generator_ex的区别是什么呢?

         从表面看就是[  ]和(),但是结果却不一样,一个打印出来是列表(因为是列表生成式),而第二个打印出来却是,

      如何打印出来generator_ex的每一个元素呢?

#生成器 generator_ex = (x*x for x in range(10)) print(next(generator_ex)) print(next(generator_ex)) print(next(generator_ex)) print(next(generator_ex)) print(next(generator_ex)) print(next(generator_ex)) print(next(generator_ex)) print(next(generator_ex)) print(next(generator_ex)) print(next(generator_ex)) print(next(generator_ex)) 结果: 0 1 4 9 16 25 36 49 64 81 Traceback (most recent call last): File "列表生成式.py", line 42, in print(next(generator_ex)) StopIteration

可以看到,generator保存的是算法,每次调用next(generaotr_ex)就计算出他的下一个元素的值,直到计算出最后一个元素,没有更多的元素时,抛出StopIteration的错误,而且上面这样不断调用是一个不好的习惯,正确的方法是使用for循环,因为generator也是可迭代对象:

#生成器 generator_ex = (x*x for x in range(10)) for i in generator_ex: print(i) 结果: 0 1 4 9 16 25 36 49 64 81

所以我们创建一个generator后,基本上永远不会调用next(),而是通过for循环来迭代,并且不需要关心StopIteration的错误,

第二种方式:在函数中使用yield关键字,函数就变成了一个generator。

                     调用函数就是创建了一个生成器(generator)对象。

def positive(limit): n = 1 while n


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3