Python 生成器generator

Python 生成器

在这个教程里,你会学习如何轻松使用python生成器创建迭代,迭代器和常规函数的不同,以及为什么使用它

Python中的生成器

在python中构建迭代器有很大工作我们必须使用__iter__()__next__()方法实现一个类,追踪内部状态,并在没有值返回时抛出StopIteration异常

这既冗长又违反直觉。生成器在此时就有用了。

Python生成器是创建迭代器的简单方法。偶们上边提到的所有工作其实都是Python的生成器自动处理的。

简而言之,生成器就是一个函数,它返回一个对象(迭代器),我们可以对其进行迭代(一次一个值)

用Python创建生成器

使用Python创建生成器是非常简单的。就像定义普通函数一样简单,但是它使用的是yield语句而不是return.

如果一个函数至少有一个yield语句(他可能包含其它yield语句或return语句),那么它就是生成器函数。yield和return都将从函数返回一些值。

不同之处在于,return语句是完全终止函数,而yield语句只是暂停,之后会继续执行。

生成器函数和普通函数的区别

  • 生成器函数包含一个或多个yield语句
  • 调用时,他返回一个对象(迭代器),但不会立即开始执行
  • 诸如__iter__()__next__()之类的方法是自动实现的。因此可以遍历所有项目使用next()
  • 一旦执行yield,函数会暂停执行调用的方法
  • 连续调用直接会记住局部变量和他们的状态
  • 最后,函数终止时,在进一步的调用中将自动引发StopIteration异常

在下面的例子中,我们说明了上边的要点。这是一个叫做my_gen()的生成器函数,其中包含多个yield语句

In [1]:

# 简单的生成器函数
def my_gen():
    n = 1
    print("this is printed first")
    # 生成器函数包含的yield
    yield n
    
    n += 1
    print("this is printed second")
    yield 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值