python生成化学结构_python之生成器(generator)

定义:按照某种算法,边循环边计算推算出一个列表中的所有元素;

优点:受内存限制,列表容量是有限的,通过生成器,可以不断按算法推算出后续的元素,而不是把list的所有元素储存在内存中,从而实现内存的节约;

创建一个生成器:

1、把列表生成式[ ] 改成()

例:

l = [x ** 2 for x in range(10)]print(l)

g= (x ** 2 for x in range(10))print(type(g))print(next(g))print(next(g))print(next(g))print(next(g))print(next(g))

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]01

4

9

16

上面代码中l的类型是一个list,而g是一个generator;我们可以直接通过print(l)打印出列表中的所有元素,但要打印generator类型的可以通过next( )函数来获得下一个返回值,但generator也是一个可迭代对象,是可迭代对象就可以通过for循环来遍历。

l = [x ** 2 for x in range(10)]print(l)

g= (x ** 2 for x in range(10))print(type(g))

for i ing :print(i)

[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]01

4

9

16

25

36

49

64

81

当然基于复杂的推算,用列表生成式无法实现可以用函数来实现,定义generator的另一种方式:一个函数中包含yield关键字,那么这个函数就不在是一个普通函数,它是一个generator,如下图所示:

deffunc (n):

i,a=0,1

while i

a= a+2i+= 1

deffunc_y (n):

i,a=0,1

while i

a= a+2i+= 1

if __name__ =='__main__':

d= func_y(10)for i ind :print(i)

1

3

5

7

9

11

13

15

17

19

上图中函数func( )与func_y( )唯一的不同就是func( )函数中的print(a)变成了func_y( )中的yield a,func_y( )是一个生成器,那么就是一个可迭代对象,可以通过for来循环print(i)。所以在python中,可以很简单的把列表生成式的[ ]改成( )来改成generator,也可以通过更改函数中yield关键字来实现定义一个generator。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值