zoukankan      html  css  js  c++  java
  • 生成器

    两种创建生成器的方法:

      将列表推导式的 [ ] 换成 ( )

      在函数里使用 yield

    三种启动生成器的方法:

      next()

      send(参数)

      for循环

    迭代器和生成器的区别:

      迭代器可以减少资源耗用,实现循环

      生成器是特殊的迭代器,可以通过yield暂停执行,也可以通过send启动方式传参改变执行方式

    创建生成器对象和实例化一样,互不影响

    实例

    def fibo(all_num):
        """存在yield的函数,会变为生成器的模板"""
    
        a, b = 0, 1
        current_num = 0
        while current_num < all_num:
            ret = yield a  # yield暂停,返回a的值,并且下次遍历时从yield下一个语句开始,即赋值给ret
            print("ret:", ret)
            a, b = b, a+b
            current_num += 1
    
    
    # 创建生成器对象
    obj = fibo(10)
    # obj2是新开辟的内存空间,与ojb互不影响
    obj2 = fibo(10)
    
    # 启动生成器方法1
    ret = next(obj)
    print("obj:", ret)
    
    # 启动生成器方法2,可传参,但第一次启动就使用send,参数必须是None
    ret = obj.send("")  # send(参数)中的参数等价于生成器里的yidel a的结果
    print("obj:", ret)
    
    # 启动生成器方法3
    for i in obj:
        print(i)
  • 相关阅读:
    ASP.NET MVC学习笔记-----ActionInvoker
    quartz启动报错
    THUSC 2021 游记
    C++下随机数的生成
    友链
    memset一些技巧
    CodeForces Round #705 总结&题解
    php计算两坐标距离
    vue中使用keepAlive组件缓存遇到的坑
    vue 中 keepAlive
  • 原文地址:https://www.cnblogs.com/Selling-fish-bears/p/10387698.html
Copyright © 2011-2022 走看看