zoukankan      html  css  js  c++  java
  • 生成器的两种方式

    生成器 Generator(python2.5及之后)
    什么是生成器
    ——生成器能够动态提供数据对象,生成器对象也是可迭代对象
    生成器有两种:
    生成器函数
    生成器表达式
    ------------------------------------------------------------------------------------------------------------------------------------------------------------------
    生成器函数的定义:
    含有yield 语句的函数是生成器函数,此函数被调用时返回一个生成器对象
    yield 翻译为产生(或生产)
    ————
    yield 语句
     语法:
    yield 表达式
    说明:
    ——yield 用于def函数中,目的是将此函数作为生成器函数使用;
    ——yield 用来生成数据,供迭代器的next(it)函数使用。
    ————————
    生成器函数示例:
    def myyield():
        # print("yield函数被调用")
        yield 2
        yield 3
        return "生成器出现错误!"
        yield 5
        yield 7
    # 调用myyield()函数讲返回一个可迭代对象(生成器对象)
    gen=myyield()#gen绑定生成器对象
    it=iter(gen)#it绑定用于访问gen生成器的迭代器
    print(next(it))
    print(next(it))
    print(next(it))
    print(next(it))
    print(next(it))

    >>>>>
    2
    3
    Traceback (most recent call last):
      File "ketang.py", line 50, in <module>
        print(next(it))
    StopIteration: 生成器出现错误!
    ——————————
    def myinteger(begin,end):
        n=begin
        while n<end:
            print("即将生成:",n)
            yield n
            n+=1
    for x in myinteger(10,15):
        print(x)
    >>>>>
    即将生成: 10
    10
    即将生成: 11
    11
    即将生成: 12
    12
    即将生成: 13
    13
    即将生成: 14
    14
    ————————

    生成器函数说明:
    ——生成器函数的调用将返回一个生成器对象,生成器对象是一个可迭代对象
    ——生成器函数调用return语句会触发一个StopIterator 异常 

    ------------------------------------------------------------------------------------------------------------------------------------------------------------------

    生成器表达式
    语法:
    (表达式 for 变量 in 可迭代对象 [if 真值表达式 ] )
    注:if 子句可以省略
    作用:
    用推导式形式生成一个新的生成器

    示例:
    gen=(x**2 for x in range(1,5))
    it=iter(gen)
    next(it) #1
    next(it) #4
    next(it)#9
    next(it)#16
    next(it)#StopIterator

    ——————————
    def isodd(a):
        if a%2==1:
            return True
        return False

    # 这是用一个生成器表达式生成100以内奇数的立方(是不会生成全部数据,只有用的时候调取一个数)#

    for x in (x**3 for x in range(100) if isodd(x)):
        print(x , end="")

    # 先一次性生成100以内奇数的立方存于列表中然后在循环打印

    for x in [x**3 for x in range(100) if isodd(x)]:
        print(x , end="")
    ————————————

  • 相关阅读:
    java积累
    mybatis
    Netty
    springcloud相关笔记整理
    java基础总结笔记
    读书笔记-RocketMQ实战与原理解析
    读书笔记-kafka权威指南
    读书笔记-rabbitmq实战指南
    Centos 部署ServiceDesk
    IDEA将新建项目上传至GitLab
  • 原文地址:https://www.cnblogs.com/qxh-beijing2016/p/10734113.html
Copyright © 2011-2022 走看看