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

    # 注意:yield的作用是第一次执行生成器时程序停在yield所在行,并返回yield后的值。
    # 第二次执行生成器时,程序会在第一次停止的位置执行 ,以此类推。。。
    # send(None) 相当于 第一次 next()的效果
    
    # 斐波那契数列
    def create_num():
        print("----start----")
        i, j = 0, 1
        for k in range(5):
            yield j
            i, j = j, i + j
        print("----end----")
    
    def test():
        i = 0
        while i < 5:
            temp = yield i
            print(temp)
            i += 1
    
    if __name__ == "__main__":
        a = [x for x in range(10)]
        print(a)
        # 如果数据比较多时,就比较占用内存了,所以可以采用生成器
    
        # 生成器的创建方式一
        b = (x for x in range(10))
        print(b)  # <generator object <genexpr> at 0x007AAEB0>
        # 获取数据,第二个参数是指定获取对应位置的值
        print(next(b, 1))  # 0
        print(next(b, 2))  # 1
        print(next(b, 3))  # 2
        # 注意:如果第二个参数不填,则每执行一次,就获取下一个, 如下:
        print(next(b))  # 3
        print(next(b))  # 4
        print(next(b))  # 5
    
        # 生成器创建方式二:在函数内部使用了yield关键字
        create = create_num()
        print(create)  # <generator object creat_num at 0x0077AE70>
        print(next(create)) # 1
        print(next(create)) # 1
        print(next(create)) # 2
        print(create.__next__())
        # 遍历生成器
        '''
        ----start----
        1
        1
        2
        3
        5
        ----end----
        '''
        for num in create:
            print(num)
    
        # 生成器之send的用法
        '''
        0
        haha
        None
        2
        '''
        test = test()
        print(test.__next__())
        test.send("haha") # 将haha赋给temp
        print(test.__next__())
  • 相关阅读:
    MySQL库表设计小技巧
    教你用SQL实现统计排名
    Truncate用法详解
    utf8字符集下的比较规则
    关于Aborted connection告警日志的分析
    MySQL DDL详情揭露
    时间戳,这样用就对了
    在线修改主从复制选项
    20181211HW
    20181207hw
  • 原文地址:https://www.cnblogs.com/yang-2018/p/10850331.html
Copyright © 2011-2022 走看看