生成器

一个包含yield关键字的函数就是一个生成器函数,并且yield和return不可以共用,并且yield只能用于函数内。
(1)生成器函数执行之后会得到一个生成器作为返回值,并不会执行函数体。
(2)执行了__next__方法之后才会执行函数体,并且返回函数值。
(3)next()内置方法,内部调用生成器函数的__next__()方法。
(4)yield和return相同的是可以返回值,但是不同的是yield不会结束函数。
生成器的使用

def shengchan(n):
    i=1
    while i<=n:
        yield i
        i+=1
x=shengchan(5)
print(x)
for y in x:
    print(y)

结果:
<generator object shengchan at 0x00000000037BDD68>
1
2
3
4
5

send获取下一个值的效果和next()基本一致,只是在获取下一个值的时候,给上一yield的位置传递一个数据。
注意:(1)第一次获取生成器的时候,是用next获取下一个值
(2)最后一个yield不能接受外部的值。

def f():
    print("a")
    x=yield 10
    print("接收到的数据是:",x)
    yield x+3
x=f()
print(next(x))
b=x.send(66)
print(b)

结果:a
10
接收到的数据是: 66
69

yield from循环遍历容器类型

def f():
    yield from "ab"
    yield from range(5)
for x in f():
    print(x)

结果:a
b
0
1
2
3
4

生成器表达式,将列表解析式[]改成()即可

b=(i for i in range(5))
print(b)
for x in b:
    print(x)

结果:
<generator object at 0x00000000037CDD68>
0
1
2
3
4

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值