生成器

1.通过列表方式直接创建一个列表,不仅列表容量有限,而且会占很大的内存空间。

python中,这种一边循环一边计算的机制,称为生成器:generator

2.创建生成器的方法

In [15]: L = [ x*2 for x in range(5)]

In [16]: L
Out[16]: [0, 2, 4, 6, 8]

In [17]: G = ( x*2 for x in range(5))

In [18]: G
Out[18]: <generator object <genexpr> at 0x7f626c132db0>
创建 L 和 G 的区别仅在于最外层的 [ ] 和 ( ) , L 是一个列表,而 G 是一个生成器

可以通过next()函数获得下一个返回值

In [19]: next(G)
Out[19]: 0

In [20]: next(G)
Out[20]: 2

In [21]: next(G)
Out[21]: 4

In [22]: next(G)
Out[22]: 6

In [23]: next(G)
Out[23]: 8

In [24]: next(G)
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-24-380e167d6934> in <module>()
----> 1 next(G)

StopIteration: 

In [25]:

In [26]: G = ( x*2 for x in range(5))

In [27]: for x in G:
   ....:     print(x)
   ....:     
0
2
4
6
8
生成器保存的是算法,每次调用 next(G) ,就计算出 G 的下一个元素的值,直到计算到最后一个元素,没有更多的元素时,抛出 StopIteration 的异常。

而通过for循环来迭代,并不会出现异常。

方法2:

著名的斐波拉契数列(Fibonacci),除第一个和第二个数外,任意一个数都可由前两个数相加得到:
1, 1, 2, 3, 5, 8, 13, 21, 34, ...

In [28]: def fib(times):
   ....:     n = 0
   ....:     a,b = 0,1
   ....:     while n<times:
   ....:         print(b)
   ....:         a,b = b,a+b
   ....:         n+=1
   ....:     return 'done'
   ....: 

In [29]: fib(5)
1
1
2
3
5
Out[29]: 'done'
把fiber函数换成generator,把print(b)换成yeid b
In [30]: def fib(times):
   ....:     n = 0
   ....:     a,b = 0,1
   ....:     while n<times:
   ....:         yield b
   ....:         a,b = b,a+b
   ....:         n+=1
   ....:     return 'done'
   ....: 

In [31]: F = fib(5)

In [32]: next(F)
Out[32]: 1

**************************************************

生成器是这样一个函数,它记住上一次返回时在函数体中的位置。对生成器函数的第二次(或第 n 次)调用跳转至该函数中间,而上次调用的所有局部变量都保持不变。
生成器不仅“记住”了它数据状态;生成器还“记住”了它在流控制构造(在命令式编程中,这种构造不只是数据值)中的位置。

特点:

节约内存

迭代下一次调用时,所有的参数都是第一次所保留下来的。而不是新创建的。





经历了数月艰苦的开放和程序员最痛苦的测试,今天,世上最强,最完善,最稳定和测试最充分,文档最完整的旗舰版和平之翼Java通用代码生成器SMEU 3.2.0 正式版乌篷船盛装发布了。欢迎大家下载使用。 请至本项目码云主站下载二进制war包发行版和源码: https://gitee.com/jerryshensjf/PeaceWingSMEU 和平之翼Java代码生成器SMEU 3.2.0版,研发代号(乌篷船 Black Awning Boat)已发布,本软件是旗舰版的动词算子式代码生成器。在附件中提供war包下载。此版本支持使用Excel模板的代码生成,支持初始数据导入,支持SGS语言语法加亮。欢迎使用。 乌篷船支持华丽的Excel模板代码生成和初始数据导入,软件新增Excel生成界面和示例Excel模板。界面和Excel模板如下图。 此分支为无垠式/和平之翼代码生成器阵列三大旗舰分支之一,其他两支为无垠式代码生成器JEEEU版和和平之翼代码生成器SHCEU版。 目前和平之翼代码生成器SMEU 3.2.0版乌篷船正式版已发布, 此版本支持Service,Dao组件扫描,SGS初始数据导入,多对多初始数据导入,一对多动态标签等先进特性,新增在线文档:代码生成器技术乱弹,欢迎使用。现在此版本war包已上传至本站附件栏,并经过详细测试,有重大Bug修复与功能更新,涉及一系列遗漏的Bug修复,包括Excel模板生成的一些缺陷,和Boolean类型的一系列缺陷,已发现的Bug均已修复,欢迎下载使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值