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

  • 相关阅读:
    生成验证码图片(含模糊背景)
    再论验证码安全:请及时销毁你的验证码
    C# DES 加密/解密
    jQuery 表格工具集
    见证VS2010发布会[转]
    jQuery Lightbox(balupton版)图片展示插件讲解
    Coding完美世界——VS2010发布会见闻!【转】
    asp.net对Get请求的加密
    【C#源码】DES加密解密类
    asp.net1.1和asp.net 2.0共存
  • 原文地址:https://www.cnblogs.com/yuky/p/10769051.html
Copyright © 2011-2022 走看看