栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python之三大法器——生成器

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

python之三大法器——生成器

  • 生成器是一类特殊的迭代器,它不需要再像上面的类一样写iter()和next()方法了, 使用更加方便,它依然可以使用next函数和for循环取值

  • 创建生成器的方法一:

    • 只要把一个列表生成式的[]改成(),就创建了一个生成器

    • >>> (i for i in range(0,5))
       at 0x102c38360>
    • 我们可以看到他的类型是genexpr

  • 创建生成器的方法二:

    • 只要在def中有yield关键字的 就称为 生成器

    • def gen():
         i =0
         while i<5:
              temp = yield i    
              print(temp)
              i+=1
    • g = gen()
      for i in g:
        pring(i)
    • next(f)
    • f = gen()
      next(f)   #首次调用必须是next,因为生成器还没有执行到yield 无法进行接收值
      f.send('haha')   #send 发送值 传递给生成器 由temp进行接收
      next(f)   #再次调用next  相当于send了一个None
      f.send('haha')
    • def fibonacci(num):
          # 初始化第一个值和第二个值
          a =0
          b =1
          # 记录生成fibonacci数字的下标
          current_index =0
          while current_index < num:
              result = a
              a, b = b, a + b
              current_index +=1
              # 代码执行到yield会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行
              yield result
      ​
      for i in fibonacci(5):
          print(i)
    • yield和return的对比

      • 使用了yield关键字的函数不再是函数,而是生成器。(使用了yield的函数就是生成器)

      • 代码执行到yield会暂停,然后把结果返回出去,下次启动生成器会在暂停的位置继续往下执行

      • 每次启动生成器都会返回一个值,多次启动可以返回多个值,也就是yield可以返回多个值

      • return只能返回一次值,代码执行到return语句就停止迭代,抛出停止迭代异常

      • yield可以在下次执行的时候接受传递的值

  • yield的使用生成菲波那切数列:

  • 还可以调用send方法给yield传值

  • 我们也可以使用next方法取值

  • 我们可以使用for循环遍历生成器

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/504098.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号