我是靠谱客的博主 寂寞心锁,最近开发中收集的这篇文章主要介绍python-生成器-yield关键字(一),觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

生成器[generater]

    • 生成器
      • 定义生成器
      • 和推导式的区别
      • 使用
      • 生成器的四个方法

生成器

定义生成器

  1. 使用yield关键字
    def generate_one(list_num):
        for i in list_num:
            yield i * i
    
  2. 使用圆括号
    v2 = (i * i for i in range(6))
    

和推导式的区别

生成器表达式不会创建序列形式的对象,不会把所有的值都读取到内存中,而是会创建一个通过迭代并按照需求生成值的生成器对象(Generator)。

  1. 也就是说占用内存很小 如果使用较大数据推荐使用生成器

使用

  1. 可使用next()函数 但超出会报StopIteration错误
    v1 = generate_one([1, 2, 3, 4, 5])
    print(next(v1))
    
  2. 其中每次next都会去找下一个元素 如果没有就会报错

生成器函数返回生成器。要注意的是生成器就是一类特殊的迭代器。作为一个迭代器,生成器必须要定义一些方法,其中一个就是__next__()。
每当生成器被调用的时候,它会返回一个值给调用者。在生成器内部使用yield来完成这个动作。为了记住yield到底干了什么,最简单的方法是把它当作专门给生成器函数用的特殊的return。调用next()时,生成器函数不断的执行语句,直至遇到yield为止,此时生成器函数的"状态"会被冻结,所有的变量的值会被保留下来,下一行要执行的代码的位置也会被记录,直到再次调用next()继续执行yield之后的语句。
next()不能无限执行,当迭代结束时,会抛出StopIteration异常。迭代未结束时,如果你想结束生成器,可以使用close()方法。

  1. 看以下用法
    def generate_one(list_num):
    print('start')
    for i in list_num:
        yield i * i
    print('end')
    
    v1 = generate_one([1, 2, 3, 4, 5])
    for v in v1:
        print(v)
    
    输出
    输出
    其中每次调用生成器会先执行yield之前的语句 直到遇到yield返回(类似于return)

    带yield的函数是一个生成器,而不是一个函数了,这个生成器有一个函数就是next函数,next就相当于“下一步”生成哪个数,这一次的next开始的地方是接着上一次的next停止的地方执行

生成器的四个方法

  1. __next__()
  2. send()
  3. throw()
  4. close()

最后

以上就是寂寞心锁为你收集整理的python-生成器-yield关键字(一)的全部内容,希望文章能够帮你解决python-生成器-yield关键字(一)所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(45)

评论列表共有 0 条评论

立即
投稿
返回
顶部