python生成器及应用场景 |
您所在的位置:网站首页 › access中表达式生成器的使用场景 › python生成器及应用场景 |
概念:
生成器是一个特殊的程序,可以被用作控制循环的迭代行为,是一边循环一边计算的机制,称为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 |