python3--生成器

生成器

  • 包含yield语句。函数使用yield而不是return返回结果。yield一次生成一个值后,函数停止执行,处于挂起状态,被重新激活后,从停止处继续执行。
  • 本质是迭代器,实现了迭代器的功能。
  • 优点:不会一次性在内存中生成太多数据,根据需要生成。
  • 获取生成值的方法:__next__()或者send(参数),但是send(参数)不能用在首次获取生成值的时候。
  •  yield from 等价 for 循环 yield
def gen1():
    x = 1
    yield x
    print('***' ,x)
    y = 2
    yield y
    print('*****' ,y)
  
ge1 = gen1()
print(ge1.__next__())   # 1
print(ge1.send(''))     # *** 1  此处send(参数)作用与__next__()一致
                        # 2
                      
def gen2():
    x = 1
    con1 = yield x
    print('***' ,con1)
    y = 2
    yield y
 
 
ge2 = gen2()
print(ge2.__next__())   # 1
print(ge2.send('hi'))   # *** hi 此处send(参数)的作用是在获取下一个yield值的时候,给上一个yield处的变量传递一个值
                        # 2

# yield from <==> for 循环  yield
def gen3():
    yield from 'abc'
print(list(gen3()))  # ['a', 'b', 'c']

def gen4():
    for i in 'abc':
        yield i
print(list(gen4()))  # ['a', 'b', 'c']

列表推导式与生成器表达式

  • 列表推导式[],生成器表达式()
# 列表推导式与生成器表达式
lis = [i for i in range(10)]  # 列表推导式
gen = (i for i in range(10))  # 生成器表达式,gen是个生成器表达式类型的生成器
print(lis)  # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
print(next(gen))  # 0
  • 生成器表达式几乎不占内存,在数据量大的时候不会导致服务器卡死
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值