zoukankan      html  css  js  c++  java
  • 生成器,迭代器

    一、迭代器

      1、可迭代协议

      查看类中定义好的所有方法:dir 函数

    print(dir('qwe'))     打印对象中的方法和函数
    
    print(dir(str))       打印类中声明的方法和函数

      2、内部含有__iter__方法的对象就叫做可迭代对象,可迭代对象遵循可迭代协议。

         可迭代对象不能取值,因为内部不含有__next__方法

      3、如何判断是否为可迭代对象。            print( '__iter__' in dir( ) )

    二、生成器

      1、生成器的实质就是迭代器

      在python中有三种方式来获取生成器:

        1、通过生成器函数

        2、通过各种推导式来实现生成器

        3、通过数据的转换获取生成器

    def func():
        print(111)
        return 222
    ret = func()     #函数调用
    print(ret)
    结果: 111
           222

    将函数中的return换成yield就是生成器

    def func():
        print(111)
        yield 222
    ret = func()     #获取生成器
    print(ret)
    结果:<generator object func at 0x00000000025E7308>

    现在执行函数的时候就不是函数的执行了,而是获取一个生成器

    def func():
        print(111)
        yield 222
    ret = func()
    print(ret.__next__())   __next__()执行生成器
    结果: 111
          222
     yield 和return 区别
    1. 如果函数中包含了yield, 这个函数是一个生成器函数. 执行函数的时候是: 获取生成器
    2. 生成器执行__next__(). 执行到下一个yield
    3. yield的作用和return基本相同. 但是,只负责返回. 不会结束函数
    4. return,结束函数.

    当程序运行完最后一个yield,后面继续运行__next__()会报错

      2、send 和__next__() 的区别

        1、send 和__next__() 都是让生成器向下走一次

        2、send可以给上一个yield位置传递值,不能给最后一个yield位置传递值,第一次执行生成器代码不能使用send()

    def jiaoyou():
        print("开始旅游")
        address1 = yield "告诉我你想去哪里"
        print(""+str(address1))
        address2 = yield "你还想去哪儿?"
        print("还想去"+ str(address2))
        yield "结束旅行"
    gen = jiaoyou()         #获取生成器
    ret = gen.__next__()    # 执行到第一个yield 获取到返回值
    print("ret=", ret)
    ret2 = gen.send("少林寺")  #给address1传递‘少林寺’
    print("ret2 = ", ret2)
    ret3 = gen.send("武当山")  #给address2传递‘武当山’
    print("ret3 = ", ret3)
    
    结果:
    开始旅游
    ret= 告诉我你想去哪里
    去少林寺
    ret2 =  你还想去哪儿?
    还想去武当山
    ret3 =  结束旅行
  • 相关阅读:
    solr dataimport 数据导入源码分析(九)
    正确理解ThreadLocal
    solr dataimport 数据导入源码分析(六)
    solr dataimport 数据导入源码分析(七)
    solr dataimport 数据导入源码分析(八)
    solr dataimport 数据导入源码分析(一)
    solr dataimport 数据导入源码分析(五)
    OpenGL光照、键盘
    OpenGL着色
    OpenGL纹理映射
  • 原文地址:https://www.cnblogs.com/molieren/p/9199350.html
Copyright © 2011-2022 走看看