生成器、推导式

一、生成器

1.生成器的本质就是迭代器

生成器一定是一个迭代器,迭代器不一定是一个生成器

def func():
    print(1)
    yield 5  # 我的函数走到这了,停了
    print(2)
    yield 9  # 我的函数走到这了,停了

g = func()  # 生成一个生成器

print(g.__next__()) # 1 5
print(g.__next__()) # 2 9
print(g.__next__()) # 报错 StopIteration

ps:错误三种分析
1.语法分析
2.语义分析
3.词法分析

2.生成器特点

  • 非常节省内存
  • 碰到yield不结束就挂起
  • 惰性机制
  • 不能从下向上走
  • 一次性的,用完就没了

应用场景:需要大批量数据时,可以用生成器,用一个释放一个

def func():
    print(1)
    a = yield 2  # 1.挂起 2.返回值 3.接受值
    print(a)   # '123'
    print(3)
    b = yield 4
    print(b)   #'234'
    c = yield 9

g = func()

print(g.__next__())   #1 2  g.send(None)
print(g.send('123'))  # send = next+传值
print(g.send('234'))  # send = next+传值

第一次调用生成器的时候使用send里边的值必须是None

def func():
    li = [1,2,3,4]
    yield from li

ret = func()  # 把生成器的地址给了ret
print('is ret',ret.__next__())  # is ret 1
# 执行ret这个变量的指向的生成器地址
print('is ret',ret) # is ret <generator object func at 0x0000023C6B9816D8>
# 在全局空间找到一个变量叫做ret的,打印它的值 值就是生成器的地址
def func():
    with open('t','r',encoding='utf-8')as f:
        for i in f:
            i = i.strip('\r\n')
            yield i

g = func()
for i in range(10):
    print(g.__next__())

二、推导式

1.列表推导式

格式:[结果 语法]

li = []
for i in range(10):
    li.append(i)
print(li)

print([i for i in range(10)])
# 两个输出结果是一样

带筛选功能的列表推导式

li = []
for i in range(10):
    if i%2 == 1:
        li.append(i)
print(li)

print([i for i in range(10) if i%2 == 0])
li = []
for i in range(10):
    for em in range(3):
        li.append(em)
print(li)

print([j for i in range(10) for em in range(3) for j in range(5)])

2.集合推导式

格式:{结果 语法}

s = {i for i in range(10)}
print(s)

3.字典推导式

print({i:i+1 for i in range(10)})

推导式:
1.列表
2.集合
3.字典
没有其他推导式
元组是生成器推导式

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值