• 迭代器、生成器、面向对象


    迭代器
      什么是迭代器()iterator
        器指的某种工具
        迭代指的是更新换代的过程,例如应用程序的版本更新从1.0变成1.1再1.2
        迭代的目的是要根据上一个结果,产生下一个结果,这是一个重要的过程,但不是单纯的重复
        迭代器就是,一种根据上一个结果得到下一个结果的工具,简单地说就是一种获取数据的工具
      可迭代对象
        指的就是可以使用迭代器取出数据的对象
        如何判断一个对象是否可迭代,就看这个对象是否提供迭代器,通过对象调用__iter__()来获取迭代器
      所有的容器类型(包括字符串)都是可迭代的
      迭代器的使用
        1.通过调用对象的__iter__()方法得到迭代器
        2.调用迭代器的__next__()的方法获取每一个值
      如何判断一个对象是不是迭代器?
        迭代是为了取值,取值使用next方法,那么只要对象具备next方法就称之为迭代器
        其中文件类型比较特殊,它既是迭代器,又是可迭代对象
      迭代器总结:
        迭代器是一种通用的取值工具
        只有具备__iter__()方法的对象才能被迭代器取值,称之为可迭代对象
        迭代器是为了取值,只要具备next方法的就是迭代器
        python中迭代器同时具备iter方法和next方法 调用iter将返回迭代器自身
        每一种数据类型内部的迭代器实现都各不相同
      为什么用迭代器
      统一取值方式
    dic ={'a':1,'b':2,'c':3}
    iter_dic=dic.__iter__()
    print(iter_dic)#<dict_keyiterator object at 0x000001DB0E9D67C8>
    print(iter_dic.__iter__() is iter_dic)#True

    print(iter_dic.__next__())
    print(iter_dic.__next__())
    print(iter_dic.__next__())
    print(iter_dic.__next__())#抛出异常StopIteration,或者说结束
    有了迭代器后
    iter_dic=dic.__iter__()
    while True:
    try:
    k=next(iter_dic)
    print(dic[k])
    except StopIteration:
    break
    如何使用
    for 循环
    for k in dic:
    print(dic[k])
    for 循环的工作原理
      1.执行in后对象的dic_inter__()方法,得到一个迭代器对象inter__dic
      2.执行next(iter_dic),将得到的值赋值给k,然后执行循环体代码
      3.重复过程2,直到捕捉到异常StopIteration,结束循环
        要获取数据首先要有数据
        保存数据的方式有很多,如下

        目前每种数据类型,取值方式不统一这就有问题了,万一后续增加新的数据类型,还得学习新的取值方式
        每种类型还不同,最好的解决方案是:提供一种通用的取值方式使其可以搭配任何数据类型,
        msg=’hello word‘
        带有__开头__结尾的方法都是内置的特殊方法
    生存器
    generator
      生存数据的工具
      生成是从无到有的过程
      工具可以直接看成函数,我们可以自己定义一个函数来生成数据,但是每次执行
      函数都只能产生一次数
      生成器的目的就是可以多次不断的生成数据
      在python中生成器就是一个函数
      但是函数内部具备至少一个yield关键字
      反过来只要函数中出现yield那么该函数就是一个生成器
    yield关键字
      一旦函数中出现了yield,调用函数时就不会立即执行函数体,并且会返回一个生成器对象
      当调用生成器的next方法时会执行函数体,但是如果执行期间遇到了yield函数就会暂停执行
      每一次调用next都是从上一次yield的位置继续往下执行,同时会将yield后的数据返回给调用者
    yield与return的区别
      都能返回一个值
      不同之处在于return只返回一次值,只要执行return函数就整体结束了
      而yield可以返回多个值,并且会返回后将函数暂停住
      生成器就是迭代器
      生成器同时具备iter和next 函数,足以证明就是一个迭代器,所以直接使用for来遍历
      迭代器就是通过生成器实现的

    迭代器,生成器,for之间的关系
      for的原理是使用迭代器取值
      迭代器是通过生成实现的

    了解知识点
      yield的特殊用法
        当你的生成器中需要外界数据参与时生成器如何接受外界的数据
        闭包和参数都能传数据到生成器中,但是都只能接收一次值,如果想要多次传值就需要
      send函数用于向生成器发送数据,但是要注意必须先进行初始化,也就是先调用一次__next__()方法
    def eater(name):
    print('%s开始吃饭了'%name)
    food_list=[]
    while True:
    food=yield food_list
    print('%s吃了%s'%(name,food))
    food_list.append(food)
    chihuo=eater('sjh')
    chihuo.send(None)#对于表达式形式的yield,在使用时,第一次必须传None,chihuo.send(None)等同于next(chihuo)
    chihuo.send('排骨年糕')
    chihuo.send('半熟芝士蛋糕')
    迭代器?
      for循环的实现原理
      内部就是子啊获取迭代器,不断的调用next帮你到,知道没有值可取为止
      可迭代对象就是拥有iter的对象

    生成器
      为了不断的产生数据
      迭代器就是通过生成器实现的
    面向过程编程
      是一种编程的思想,同样的在编程界不知有这一种编程思想,还有面向对象编程
      编程思想没有高低之分,只有适合与不适合
      你要思考的是什么样的应用程序应该采用哪种编程思想

      核心在于过程,指的是在编程时时刻想着过程
      过程指的就是,第一步干什么第二步干什么,完成这个任务需要哪些步骤
      以及每个步骤要干什么
    面向过程编程思想的优点与缺点
      优点:可以将一个复杂的大问题,拆分简单的小问题,将复杂的问题简单化,流程化。
      缺点:牵一发需要动全身,扩展性极差,正因如此,才有了新的编程思想,即面向对象
      使用场景:对于一些对罗战星不高的应用程序,建议采用面向过程,列如系统内核,shell脚本程序等等
            后期我们开发的应用程序大多都是直接面向用户的,需求变化非常繁琐,所以这时候就要用到面向对象




















  • 相关阅读:
    创建一个Phone实体,完成多页面的电话簿项目
    ABP教程-对Person信息进行操作
    完善Person页面的视图操作功能
    实现ABP中Person类的权限功能
    在ABP中创建Person实体类
    ABP教程-给项目添加SwaggerUI,生成动态webapi
    ABP教程-通过ABPboilerplate模版创建项目
    EF Codefirst 多对多关系 操作中间表的 增删改查(CRUD)
    ORM小练习代码
    Tomcat中work目录
  • 原文地址:https://www.cnblogs.com/ShenJunHui6/p/10277268.html
Copyright © 2020-2023  润新知