本周小结

每周小结

目录

  • 常见的内置函数

  • 迭代

    1. 可迭代对象
    2. 迭代器对象
    3. for 循环的本质
  • 生成器

    1. 生成器对象

    2. yield的用法

    3. 生成器表达式

  • 异常捕获

    1. 异常的本质
    2. 异常的结构
    3. 异常的分类
    4. 处理异常捕获的关键字及作用
  • 模块

    1.模块的简介

    2.导入模块

    1.语法句式
    2.句式的其他用法
    3.循环导入
    4.绝对导入和相对导入

    3.模块的查找顺序

    4.包

    1.什么是包

    2.包的作用

    5.软件开发的目录规范

    6.常见的内置模块

    1.collections 模块
    2.时间模块
    1.time模块
    2.datetime 模块
    3.os 模块
    4.sys模块
    5.json 模块

常见的内置函数

  • 常见的内置函数可分为三种类型

    1.数学相关

    函数 作用
    abs( ) 求绝对值
    max( ) 求最大值
    min( ) 求最小值
    sum( ) 求和
    sorted( ) 排序
    len( ) 求长度
    divmod( ) 整除,求商和余数
    pow( ) 求幂指数
    round( ) 获取指定位数的小数
    range( ) 生成一个a到b的数组,左闭右开

    2.类型转换

    函数 作用
    int( ) 转换为整型,将其他进制转换为十进制
    float( ) 转换成浮点型
    str( ) 转换为字符型
    bool( ) 转换成布尔值
    bytes( ) 转换成字节
    list( ) 转换成列表
    iter( ) 返回一个可迭代对象
    dict( ) 转换成字典
    enumerate( ) 枚举
    tuple( ) 转换成集合
    set( ) 转换成元组
    hex( ) 将十进制转换为十六进制
    oct( ) 将十进制转换为八进制
    bin( ) 将十进制转换为二进制
    chr( ) 将数字转换为对应的ASCII编码字符
    ord( ) 将ASCII编码字符转换为对应的数字

    3.功能相关

    函数 作用
    eval( ) 识别并执行简单的py语句
    exec( ) 识别并执行所有复杂的py语句
    filter( ) 通过判断函数,筛选符合条件的元素
    map( ) 将func用于每个iterable对象
    zip( ) 将括号中分组合并,返回一个zip对象
    type( ) 返回一个对象的类型
    id( ) 返回对象的唯一标识值
    hash( ) 返回一个对象的hash值,具有相同值的括号中的具有相同的hash值
    help( ) 调用系统内置的帮助系统
    isinstance( ) 判断一个对象是否为该类的一个实例
    issubclass( ) 判断一个类是否为另一个类的子类
    globals( ) 全局变量的标识位
    next( ) 接收一个迭代器,返回迭代器中的数值
    reversed( ) 生成一个反转序列的迭代器

迭代

  • 什么是迭代

    ​ 迭代就是在其原来的基础上更新换代

    可迭代对象

    • 如何判断迭代对象

      ​ 内置有__ iter__ 方法的都为可迭代对象

      内置:通过句点符点出的方法名就是为内置

    • 迭代对象和不可迭代对象的类型

      1.可迭代对象:

      字符串,列表,字典,元组,集合,文件对象

      2.不可迭代对象

      整型,浮点型,布尔值,函数名

    迭代器对象

    • 迭代器对象的作用

      ​ 迭代器对象给我们提供了一种不依赖于索引取值的通用取值方式

      ​ 可以对字典、集合等无序类型进行循环取值

    • 如何判断迭代器对象

      ​ 内置有__ iter__ 和 __ next__ 的对象都为迭代器对象

    • 可迭代对象和迭代器对象的关系

      ​ 可迭代对象调用 __ iter__ 方法后就变成了迭代器对象

      ​ 迭代器对象无论调用 多少次 __ iter__ 方法 最终都还是迭代器对象的本身

    • 迭代器对象与索引取值的差异

      索引取值 迭代取值
      优势 可以随意反复的获取任意数据值 为所有类型提供了通用的取值方式
      劣势 对于无序的容器类型无法取值 取值一旦开始,就不能获取已经取过的值
    • 迭代器的反复使用

      1.当不给迭代器对象赋值的时候,每一次执行使用都会产生一个新的迭代器对象

      2.给迭代器对象赋值的时候,每一次使用都是用同一个迭代器对象

    • 针对双下方法

      ​ 双下方法可以写成其他形式

      ​ 如:__ iter__ ====> iter( )

    • 迭代器对象的特殊

      ​ 可迭代对象 迭代器对象 通过打印操作无法直接看出内部数据的情况

      ​ 可以节省内存

  • for循环的本质

    ​ Python的for循环本质上就是通过调用Iterable可迭代对象的__iter()__方法获得一个Iterator迭代器对象,然后不断调用Iterator迭代器对象 __ next() __ 方法实现的。

生成器

生成器对象

  • 生成器对象的本质

    生成器的本质就是迭代器对象(是自己定义出来的)

  • 生成器对象的目的

    目的的就是为了优化代码

    可以节省数据类型的内存的占用空间,是一种通用的取值方式

yield 的使用

  • 当函数体代码中有yield关键字

    ​ 函数名第一次加括号调用不会执行函数体代码,而是将函数封装成了迭代器(生成器)对象 返回值

  • yield可以在函数体代码中出现多次

​ 每次调用__ next__ 方法都会从上往下执行,直到遇到下一个 yield

  • yield后面如果有数据值

​ 会像return 一样返回出去,若有多个数据值,则会用逗号隔开,以元组的方式返回

  • yield 与 send( )连用

    yield 与森达()联用的时候,等待send( ) 的值传入到函数中,由yield 来接管。

生成器表达式

  • 生成器表达式的形式

    ​ 生成器表达式,与列表生成式的语法格式相同,只需要将[]换成(),生成器表达式返回的是一个生成器对象

  • 生成器表达式的语法

    l1 =(x*x for x in range(3))
    print(l1)
    

异常捕获

  • 异常的本质

    ​ 异常的本质就是在程序运行阶段出现了错误,导致程序终止

  • 异常的结构

    ​ 1.关键字 line 所在行
    ​ 精准提示哪行代码出现问题
    ​ 2.最后一行冒号左侧
    ​ 错误的类型
    ​ 3.最后一行冒号右侧
    ​ 错误的具体原因(也是改BUG的关键)

  • 异常的分类

    1.语法错误

    语法错误就是在程序端中只有输入或输出的错误

    2.逻辑错误

    逻辑错误就是在程序中所体现的逻辑层面的错误

  • 处理异常捕获的关键字作用

    关键字 关键字说明
    try/excrpt 捕获异常并处理
    pass 忽略异常
    as 定义异常的具体原因
    Exception/BaseException 包容所有错误类型
    else 若try子代码中没有引发异常,则执行else后的子代码
    finally 无论是否出现异常,都执行该代码
    assert 断言,断言数据属于什么类型,对则正常运行,不对则报错
    raise 主动抛出/引发异常

模块

初识模块

  • 模块的简介

    ​ 模块就是各种功能的结合形式

    ​ 使用模块就是相当于使用了模块当中的所有功能

  • 模块的分类

    分类 含义
    内置模块 解释器自带的模块,可以直接使用
    自定义模块 自己所编写的模块,可以由执行界面调用
    第三方模块 别人所编写的模块,存于网络,用的时候需要提前下载
  • 模块的表现形式

    1.py文件

    2.含有多个py文件的文件夹

    3.已经被编译成共享库等

    4.使用C编写并链接到python解释器的内置模块

  • 模块名称的创建

    ​ 以后真正的项目中 所有的py文件名称都是英文
    没有所谓的编号和中文

导入模块

只要涉及到模块的导入, sys.path 永远以执行文件为准

  • 导入模块的句式

    模块的导入句式 运行流程 优点 缺点



    import
    1.会产生执行文件的名称空间。
    2.产生被导入文件的名称空间并运行该文件内的所有代码。
    3.通过在执行文件中获取模块的'名字.'的方式可以使用到被导入文件名称空间中的名字


    通过'模块名'点的方式可以使用到模块内所有的名字 并且不会冲突


    '模块名'什么都可以点 有时候并不想让所有的名字都能被使用



    from...import...
    1.创建执行文件的名称空间
    2.创建被导入文件的名称空间
    3.执行被导入文件中的代码 将产生的名字存储到被导入文件的名称空间中
    4.在执行文件中获取到指定的名字 指向被导入文件的名称空间


    指名道姓的使用指定的名字 并且不需要加模块名前缀


    名字及其容易产生冲突(绑定关系被修改)
  • 导入模块的补充点

    1.起别名

    用as 可将模块名更改成其他名称

    2.导入多个名字

    当模块类型不同时,使用分开导入的方式

    当导入同一模块下的不同名称时,可一起导入

    3.全导入

    需要使用模块名称空间中很多名字 并且只能使用from...import句式

    from md import * " * "表示所有
    ps:针对" * "号的导入还可以控制名字的数量
    在模块文件中可以使用__ all __ = [字符串的名字]控制*能够获取的名字

  • 循环导入

    1.什么是循环导入

    循环导入就是两个模块相互导入对方

    2.循环导入的问题

    循环导入容易出现报错现象
    使用彼此的名字可能是在没有准备好的情况下就使用了

    避免问题的措施:

    当在使用前,将彼此的名字都准备好就可以了。

  • 文件类型的判断

    1.如何判断文件类型

    ​ 所有的py文件都自带__ name__内置名

    ​ 当py文件是执行文件的时候 __ name __ 的结果是 __ main__

    ​ 当py文件是被导入文件的时候 __ name __ 的结果是模块名(文件名)

    2.开发模块如何测试自己的模块

    通过__ name __ 的方式

      if __ name__ == '__ main__' :
    

    当文件是执行文件的时候才会执行if的子代码

  • 绝对导入

    ​ 以执行文件所在的sys.path为起始路径 往下一层层查找

    ​ 当模块与执行文件在不同的路径下的情况时有两种解决方法

    1.将模块的包名使用sys.path 的方式添加到路径中

    2.用 from ... impor ... 的形式直接导入

  • 相对导入

    相对导入可以不参考执行文件所在的路径 直接以当前模块文件路径为准

    可通过 . 的方式进行导入

    符号 含义
    . 当前路径
    .. 上一层路径
    ../.. 上上一层路径

    1.只能在模块中使用, 不能执行文件中使用
    2.相对导入在项目中比较复杂的情况下容易出错

模块的查找顺序

  • 模块查找的先后顺序

    内存 ====> 内置 ====> sys.path

    程序在运行阶段将代码存储到了内存,所以先从内存中寻找。

    当内置名和自己定义的模块名重复,先调用的是内置中的模块名

    其他情况就是按照执行路径导入的

  • 导入模块路径的方式

    1.通用的方式
    sys.path.append(目标文件所在的路径)
    2.利用from...import句式
    起始位置一定是执行文件所在的路径
    from xxx import xxx

  • 什么是包

    内部含有__ init__ .py的文件夹被称为包,包的本质就是文件夹

  • 包的作用

    内部存放多个py文件(模块文件) 仅仅是为了更加方便的管理模块文件

  • 如何使用

    import 包名
    导入包名其实导入的是里面的__ init __ .py文件(该文件里面有什么你才能用什么)
    其实也可以通过__ init __.py直接导入包里面的模块文件

软件开发的目录规范

文件名 功能 调用
bin文件夹 存储程序中的启动文件 start.py
conf文件夹 存储程序中的配置文件 settings.py
core文件夹 存储程序中的核心逻辑 src.py
lib文件夹 存储程序中的公共功能 common.py
db文件夹 存储程序中的数据文件 userinfo.py
log文件夹 存储程序中的日志文件 log.log
interface文件夹 存储程序中的接口文件 user.py
readme文件 用于编写程序的说明、介绍。类似于产品说明书
requirements文件 用于存储程序中的第三方文件和版本

常见的内置模块

  • collection

    方法 作用
    namedtuple( ) 具名元组,创建时会带入一些信息
    deque( ) 双端队列,在两端添加或删除数据
    OrderedDict( ) 有序字典
    defaulitdict( ) 带有默认值的字典
    Counter 计数器,主要用于计数
  • 时间模块

    time模块

    1. time 模块有三种格式,他们之间可以进行转换

    时间戳, 结构化时间, 格式化时间

    1. python中时间日期格式化符号
    形式 所表达的含义
    %Y 年份
    %m 月份
    %d
    %H 小时
    %M 分钟
    %S
    %X 本地区对应的时间

    这只是重要的几个格式化符号,具体请看前面

    1. 三种模式的转换:

    gmtime strftime

    时间戳 <----------> 结构化时间 <---------> 格式化时间

    ​ mktime strptime

    datetime模块:

    ​ datetime模块的方法

    方法 作用
    datetime.today() 获取当前的年、月、日、 时、分、秒
    date.today() 获取当前的年、月、日
    time.strftime() 可以自主调节格式,但需要提供格式
    timedelta( ) 可用于获取的时间差值,定时装置
    now( ) 获取当前时间
    utcnow( ) 获取当前美国那边的时间
  • os模块

    os模块主要是跟当前程序所在的操作系统打交道

    ​ os 模块的功能

    方法 功能
    mkdir(r'aaa' ) 在执行文件的同级路径下创建单级目录
    makdir(r'bbb/ccc/ddd') 在执行文件的同级路径下创建多级目录(也可创建单级目录)
    rmdir(r'aaa') 删除单级目录(有数据则不能删除)
    removedirs(r'ccc') 由内而外的递归删除空目录,直到有数据为止
    listdir() 列举指定路径下的文件名称(文件、目录)
    rename(r'a.txt',r'aaa.txt') 重命名文件(将前者的文件名更改为后者)
    remove(r'aaa.txt') 删除文件
    getcwd() 获取当前所在路径
    path.dirname(__ file __) 获取当前文件所在的目录路径
    path.abspath(__ fule __) 获取当前文件的绝对路径
    path.exists( ) 判断路径是否存在(存在为True,不存在为False)
    path.isdir( ) 判断该路径是否为目录或文件夹(是为True,不是为False)
    path.isfile( ) 只用于判断路径是否为文件(是为True,不是为False)
    path.join( ) 用于拼接二者的路径
    path.getsize( ) 获取文件的大小 单位为字节
  • sys 模块

    sys模块主要是跟python解释器打交道

    sys模块的方法功能

    方法 功能
    path 结果是列表
    version 查看解释器的信息
    platfrom 查看当前平台
    argv 命令行参数LIst,第一个元素是程序的本身路径
    exit(n) 退出程序,正常退出时exit(0),错误退出sys.exit(1)
  • json 模块

    1.json模块是不同编程语言之间数据交互必备的模块

    image

    2.json 的格式

    数据基于网络传输肯定是二进制 那么在python中只有字符串可以调用encode方法转成二进制数据 所以json格式的数据也属于字符串

    json格式的数据有一个非常明显的特征
    首先肯定是字符串 其次引号是标志性的双引号

    3.功能:

    方法 功能
    dump( ) 将其他数据类型转换成json格式的字符串
    loads( ) 将json格式的字符串转换成对应的数据类型
    dump( ) 将其他数据以json格式字符串的形式写入文件
    load( ) 将文件中json格式字符串读取出来并转换成对应的数据类型
posted @ 2022-07-16 22:17  Nirvana*  阅读(24)  评论(0)    收藏  举报