Day19 生成器

一. 生成器语法

只要函数内部包含有yield关键字,那么函数名()的到的结果就是生成器,并且不会执行函数内部代码

def func():
    print('====>first')
    yield 1
    print('====>second')
    yield 2
    print('====>third')
    yield 3
    print('====>end')

g=func()
print(g) #<generator object func at 0x0000000002184360> 

yield:相当于return,可以保存函数运行状态

x = yield另外一个特性:接收send传送过来的值,赋值给上一次停留的yield

生成器就是迭代器:自动实现迭代器(必须提供Next()方法)协议,所以通过next()方法进行取值

优点一:延迟计算,对于大数据量处理友好,节省内存

【return方法占空间大,效率低】

优点二:代码更简洁

【eval()可以把类型转换字典】

生成器只能遍历一次

def test():
    for i in range(4):
        yield i

t = test()

#按需生产,生成器只能遍历一次
t1 = (i for i in t) #生成器
t2 = (j for j in t1)

print(list(t1))
print(list(t2))

# 输出
[0, 1, 2, 3]
[]
def test():
    for i in range(4):
        yield i

t = test()

#按需生产,生成器只能遍历一次
t1 = [i for i in t] #列表
t2 = (j for j in t1)

print(list(t1))
print(list(t2))


# 输出
[0, 1, 2, 3]
[0, 1, 2, 3]

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值