• 迭代器,生成器,内置方法


    • 迭代器
      • 什么是迭代器:
        • 迭代:更新换代,每次迭代都必须基于上一次的结果
        • 迭代器:迭代取值的工具​
      • 为什么要用迭代器:
        • 迭代器提供了一种不依赖索引取值的方式
      • 可迭代对象:
        • 可迭代对象:只要内置有__iter__方法的都叫做可迭代对象
        • 可迭代对象-->迭代器对象:
          可迭代对象执行内置方法__iter__得到的就是该对象的迭代器对象
        • 针对双下划线开头和结尾的方法,推荐读法:双下+方法名
        • 基本数据类型中的可迭代对象:str,list,dict,tumple,set,(检测方法:加上__iter__看下 返回值是否是内存地址的形式)
        • 特殊的:
          文件对象执行__iter__后还是本身,没有任何变化(文件对象本身就是可迭代对象)
      • 迭代器取值:
        • 迭代器对象特点:
          • 内置有__iter__ 和 __next__方法
          • 迭代器一定是可迭代对象,可迭代对象不一定是迭代器对象
        • 生成迭代器和迭代器取值
          • 取值特点:只能往后取,不能回退;若取完再取就报错(stopiteration)
          • 迭代器对象无论执行多少次__iter__方法,得到的还是迭代器对象本身(******)
    • for循环本质
      • 问题引出:__iter__方法就是用来帮助生成迭代器对象的,
        文件对象本身就是迭代器对象,为什么还内置有__iter__方法
      • for循环内部本质:
        • 1.将in后面的对象调用__iter__转换成迭代器对象
        • 2.调用__next__取值
        • 3.内部有异常捕获stopiteration,当__next__报这个错,自动结束循环
      • 迭代取值优缺点:
        • 优点:
          • 1.不依赖索引取值
          • 2.内存中永远只占有一份空间,不会导致内存溢出
        • 缺点:
          • 1.不能指定取出元素
          • 2.取完之后会报错stopiteration
      • 补充:
        • 可迭代对象:内置有__iter__方法的对象叫做可迭代对象
        • 迭代器对象:内置既有__iter__方法,也有__nxet__方法
    • 生成器
      • 用户自定义的迭代器就是生成器
      • 生成器从产生到执行:
        • 1.函数内写yield + 返回值(支持多个返回值,逗号隔开,然后会以元组形式返回)
        • 2.函数名加括号的方式是生成器生效(此时就不是执行函数体内的代码块了)
        • 3.将函数名加括号赋给g,那么g就是一个生成器(生成器初始化)
        • 4.g.__next__()就是对函数做一次执行,
          这个一次的意思是到下一个yield为止,并且yield的返回值也要返回
    • yield表达形式
      • yield支持外接为其传参
      • yield特性:
        • 1.提供了一种自定义生成器的方式
        • 2.会帮你将函数的运行状态暂停住
        • 3.可以返回值
      • yield和return异同:
        • 相同点:都可以返回值,且支持返回多个
        • 不同点:① yield可以返回多次值,然后暂停函数,等待下一次生成器的调用,而return只能返回一次,接着函数立即结束
          ② yield还可以接受外部传入的值g.send()
    • 生成器表达式
      • 类比列表生成式
      • 生成器表达式可以理解为 元组生成式
      • 注意:
        • 生成器不会主动执行任何一行代码,
        • 必须通过__next__触发代码的运行
        • __next__一次只能触发执行函数到下一行yield处
    • 内置方法
      • abs()求绝对值
      • locals()返回当前所处位置 存储的所有名字;
        globals()无论在哪,查看的都是全局名称空间
      • bin();oct();hex() 这三个将十进制转换为其他进制;int()将其他进制转换为十进制
      • bool()将执行结果转换为布尔值
      • bytes也是一个数据类型
      • callable()判断是否为可调用对象
      • char()将数字转换为ASCII码表对应的字符;
        ord()将字符按照ASCII码表转换成对应的数字
      • dir()获取当前对象名称空间里边的名字
      • divmod()分页器,同时返回除数和余数
        • divmod的应用:分页器
      • enumerate()枚举,一般用于给列表加索引号,可以加初始索引号
      • eval()和exec()
        • eval() 函数用来执行一个字符串表达式,并返回表达式的值;
          exec()相比于 eval,exec可以执行更复杂的 Python 代码,返回值为None;
          eval不支持逻辑代码,只支持一些简单的python代码
      • format()三种 用法{}占位;{index}索引;{name}指名道姓
      • help()查看函数注释
      • isinstance()判断该方法时候是指定的数据类型
      • pow(x,y)返回x**y
      • round()四舍五入
    • 面向过程编程
        • 定义:类似于设计一条流水线。就是分析出解决问题所需要的步骤,
          然后用函数把这些步骤一步一步实现,使用的时候一个一个依次调用就可以了。
        • 优劣:
          • 好处:复杂的问题流程化
          • 缺点:扩展性较差,一旦需要更改,整体都受到影响

  • 相关阅读:
    RocketMQ
    Docker的基本使用
    logstash、ELK
    spring cloud杂文总结
    手写一个starter
    @SpringBootApplication你知多少?
    使用ElasticSearch
    ElasticSearch安装
    啥是ElasticSearch???
    socket、端口、进程的关系
  • 原文地址:https://www.cnblogs.com/buzaiyicheng/p/11191166.html
Copyright © 2020-2023  润新知