生成器

生成器

格式:
(表达式 for 变量参数 in 序列对象)
gen = (x * 2 for x in range(5))
print(gen, type(gen))

使用next()函数获取generator对象的数据内容
print(next(gen))
对于generator对象而言:
生成的每个元素只能被调用(使用)一次,调用完毕了,不可逆。如果generator中元素已经全部被使用过了(一次),再去通过next()方法调用的话,会报错 --> stopIteration

将generator对象转为一个列表对象
lt = list(gen)
方式二:
定义函数,函数体中需要配合yield关键字来返回数据
def demo(n):
lt = []
for x in range(1, n + 1):
lt.append(x)
yield x
return lt

#需求:实现全排列
str1 = ‘ABCD’
str2 = ‘WXYZ’

def func(str1,str2):
for i in str1:
for j in str2:
yield i + j
f = func(str1,str2)
print(f)
for x in f:
print(x)

gen = (x + y for x in str1 for y in str2)
for y in gen:
print(y)

生成器:
生成器对象内部封装了一套算法(生成数据的),只有等到需要调用(使用)数据的时候,
才会真正的去解析算法,将数据加入到内存中;
注意:内部的数据只能被调用(使用)一次

说一说:生成器和列表生成式的区别?
生成器:
执行完毕以后生成一个生成器(generator)对象,
此时这个对象中并没有具体真实的数据;
等到你想要去使用的使用,它才会解析表达式(算法)将数据进入内存,
由于数据并不直接存在内存中,所以它几乎不需要消耗过多的内存空间,
但是运算数据的效率比列表生成式稍逊一筹

列表生成式:
执行完毕以后得到一个列表对象,
此时这个对象中已经确定了每个元素的内容(进内存了),
由于数据已经在内存中,所以它占用内存空间比较多;
但是运算数据的效率比生成器好优秀

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值