• 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()。

  • 相关阅读:
    SQL如何获取上一条..下一条..首尾记录
    PHP判断浏览器类型的代码
    html命名规范
    使用JavaScript JS 获取label for 标签的值和for值
    PNG透明兼容IE6的几种方法
    冉茂锋同学去上课了
    十一戒,自勉
    语录
    CreateThread最后还是调用的ntdll.dll里面的ZwCreateThread
    InitializeObjectAttributes
  • 原文地址:https://www.cnblogs.com/yuky/p/10769051.html
Copyright © 2020-2023  润新知