Python3学习笔记——生成器yield

在 Python 中,使用了 yield 的函数被称为生成器(generator)。

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

 

def yield_test(n):
    while n > 0:
        print('before yield',n)
        yield n
        n -= 1
        print('after yield',n)
res = yield_test(3)
res.__next__() #before yield 3
res.__next__() #before yield 3 after yield 2 before yield 2
res.__next__() #before yield 3 after yield 2 before yield 2 after yield 1 before yield 1

输出结果:

before yield 3
after yield 2
before yield 2
after yield 1
before yield 1

 

 执行 yield_test 函数,返回一个 iterable 对象,在 for 循环执行时,每次循环都会执行 yield_test 函数内部的代码,执行到 yield n 时,yield_test 函数就返回一个迭代值,下次迭代时,代码从 yield n 的下一条语句继续执行。

 

#使用for循环
for i in res:
   print(i)

 输出结果:

before yield 3
3
after yield 2
before yield 2
2
after yield 1
before yield 1
1
after yield 0

比较一下return

 

def return_test(n):
    while n > 0:
        print('before return')
        return n
        n -= 1
        print('after return')
res = return_test(3)
print(res)

输出结果:

before return
3

return_test函数返回的是int数值,且执行到return n后就不再继续往下执行了。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值