Python3 生成器

Python中可以使用关键字yield将一个函数定义为一个生成器。生成器也是一个函数,可以生成一个值的序列,以便迭代使用。

生成器可以节约内存,提高内容使用效率。

生成器调用时,上次调用保存的变量不变。

e.g.1

def fun(n):
    print('fun exec a')
    for i in range(n):
        yield i
    print('fun exec b')
f_ge=fun(5)
for i in f_ge:
    print(i)

f_ge1=fun(6)

f_ge1.__next__()

 

输出:

fun exec a
0
1
2
3
4
fun exec b
fun exec a
0

e.g.2

def fun():

    print('hello' )

    m = yield 1

    print(m)

    d = yield 2

    print('World!')

f = fun()#返回生成器
ret1=next(f)#yield 返回值1,并给m
print(ret1)
ret2=f.send('Canshu')#ret2接收yield产生的2,send也会触发程序进入到下一个yield
print(ret2)
print(next(f))#没有下一个返回值,返回StopIteration异常并输出World

输出:

 

hello
1
Canshu
2
World!
---------------------------------------------------------------------------
StopIteration                             Traceback (most recent call last)
<ipython-input-7-26e7983a9cdd> in <module>
     16 ret2=f.send('Canshu')#ret2接收yield产生的2,send也会触发程序进入到下一个yield
     17 print(ret2)
---> 18 print(next(f))

StopIteration: 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值