zoukankan      html  css  js  c++  java
  • Python3学习笔记----生成器

    生成器的作用

    生成器可以在循环的过程中推算出后续的元素,不必创建完整的list,从而节省大量空间。

    生成器的创建

    1.把一个列表生成式的 [ ] 改写为( )

    # -*- coding: UTF-8 -*-
    gen= (x * x for x in range(10))
    print(gen)
    

    输出结果不是一个列表而是返回了一个生成器对象:

    <generator object <genexpr> at 0x00000190FA193AF0>
    

    2.使用了yield,以函数的形式实现生成器

    # -*- coding: UTF-8 -*-
    def my_function():
        for i in range(10000):
            yield i
    
    f=my_function()
    print(f)
    

    输出的结果同样是返回了一个生成器对象

    <generator object my_function at 0x0000017A6A213BA0>
    

    遍历生成器

    1.直接使用next()调用

    # -*- coding: UTF-8 -*-
    def generator():
        print ( 'step 1' )
        yield ( "hello" )
        print ( 'step 2' )
        yield ( "world" )
        print ( 'step 3' )
        yield ( "!" )
    
    o = generator()
    
    # next() 函数遍历迭代器
    while True :
        try :
            print( next( o ) )
        except StopIteration :
            break
    

    生成器函数在每次调用next的时候执行,遇到yield语句暂停保存当前所有的运行信息返回yield的值0,再次执行时从上次返回的yied语句处继续向下顺序执行,在yield掉所有的值后,next()会触发一个StopIteration的异常。
    输出结果

    step 1
    hello
    step 2
    world
    step 3
    !
    

    2.使用for循环遍历生成器

    # -*- coding: UTF-8 -*-
    def my_function():
        for i in range(10000):
            yield i
    
    for i in my_function():
        print(i)
    

    for循环会自动捕捉到StopIteration异常并停止调用next()。

  • 相关阅读:
    mybatis中#{}和${}的区别 (二)
    JAVA分布式架构的演变及解决方案
    mybatis中的#和$的区别
    https
    vue3的组件v-model初探1
    前端性能优化
    HTTP请求的完全过程
    http缓存详解,http缓存推荐方案
    vscode-setting备份
    Mac电脑在finder中添加- 右键打开vscode
  • 原文地址:https://www.cnblogs.com/yuky/p/10769051.html
Copyright © 2011-2022 走看看