python_8 拆包、内置函数和高阶函数

发布时间 2023-04-22 12:18:43作者: Alisa-sweet

一、查缺补漏
  1. \t 子表符,用于对其
二、拆包
  1. 拆包:顾名思义就是将可迭代的对象如元组,列表,字符串,集合,字典,拆分出相对应的元素
  2. 形式:拆包一般分两种方式,一种是以变量的方式来接收,另一种是用"*/**"号多用于函数拆包,单星号字典拆分只能得到字典的键(key),不能得到字典的值(value)
    a. 当以变量的方式拆包时需要左右两边的元素的个数和变量的个数一致,否则报错,不同类型都可通过这个拆包
    如:list1=[1,2,5] a,b,c=list1 print(a,b,c) 结果为:1 2 5
    b. 当以*和**对函数拆包时,*支持列表、元组、集合等类型的拆包,**支持字典类型的拆包
      i. *:当需要传不定长参数、多个参数时把需要的参数放在一个list或任意的可迭代对象中,在通过拆包的方式传递,拆包的过程中可以将list类型转化为tuple类型
        其中test02(*test_list)等同于test02(1,2,3,4,5,6)
        当只取list中的第一个元素也可以使用不定长参数*args来进行拆包
        如:list1=[1,2,3,5] a,*args,c=list1 print(a) 结果为:1
      ii. **:当函数需要传递多个关键字参数时可以把需要的参数放到dict类型中,再通过**拆包进行传递,拆包前后统一都是dict类型
        其中test02(**test_dict) 等同于 test02(key1="key1",key2="key2")
三、内置函数
  1. 如何查看python的内置函数 import builtins print(dir(builtins))
  2. 常用的内置函数
    a. print()
    b. input()
    c. type()
    d. len()
    e. list()、tuple()、dict()、str()、set()、bool()、int()、float()
    f. sum()
    g. id() 取内存地址
    h. range() 生成列表
  3. ()是对函数的调用,没有()的函数是没有去调用
四、高阶函数
  1. zip():压缩和解压,也可以用于list拆包,将对应位置的数据逐一拆分配对,以最短的list为准
    a. 压缩:list(zip(要压缩的表1,表2))
       当用于压缩时需要强制list类型转换才能显示出来,因为zip展示的是对象,也可以转换成字典类型
    b. 解压:list(zip(*压缩之后的结果))
       当用于解压时会恢复未压缩之前的的内容,超过长度的list元素会被丢弃
    c. 拆包:[*zip(*拆包)] 用于拆分重新配对多层list,zip前加[*]可以直接显示出结果(tuple类型)
  2. enumerate():获取可迭代对象的索引位置,不指定索引起始值,默认为0,指定以指定的值开始显示
  3. Lambda 匿名函数 接收值=lambda 形参 :返回值 可以不为函数起名,直接定义函数
五、open函数
  1. 读文件语法:
    a. 需要执行代码关闭文件
      i. file = open(file='打开的文件位置',mode='读文件一般写r,表示模式为read')
      ii. test=file.read() ---- 读取所有的数据
      iii. print(test文件名) -----打印出test.txt的内容
      iv. file.close() -----关掉文件,一定要关掉,不关掉文件光标有问题
    b. 自动关闭文件:with语句,管理上下文
      i. with open(file='test.txt',mode='r') as file: ----with语句
      ii. test = res.read() ---- 读取所有的数据
      iii. print(test) -----打印出test.txt的内容
      iv. 当执行with的时候会调用一个_ _close()的魔术方法,所以不用代码执行close
        标注:如果打开的文件和py文件在同一个文件目录下那么在file中可以直接写文件名如test.txt
        file表示任意的接收名
  2. 使用:更改位置在1>a>ii
     a. file.read() 读取整个文件内容(全部读取出来)
     b. file.readline() 读取文件的第一行数据,遇到\n换行符结束
     c. file.readlines() 读取文件逐行读取,会读取换行符,返回所有行组成的list,对比a更省内存
  3. 写文件
     a. with open(file='文件地址',mode='写文件用w-表示write') as 接收名:
      接收名.write("想写的内容")
     b. 覆盖写入,每次写入会覆盖之前的内容,全部覆盖
      追加写入,只需将mode='a'即可
      不会自动换行,需要换行必须加\n
      列:with open(file='test.txt',mode='w') as res: res.write("z") 结果:在test.txt文档中写入了z
     c. 文件保存:
      自动保存:先写进缓存区等程序运行结束之后,再一次性写进文件,当异常结束,不能成功保存
      手动保存:文件名file.flush()
      列:手动保存可以更好的保存成功
      标注:只有导入time库,才可以使用休息等待
  4. 操作模式(写在open函数的mode中)
    a. r :读
    b. w:覆盖写入
    c. a :追加写入
    d. +(表示同时可读写)
      i. r+:可读可写,覆盖写入
      ii. w+:可读可写,覆盖写入
      iii. a+:可读可写,追加写入
    e. 二进制(打开图片、上传图片)
      i. rb:二进制的方式读
      ii. wb:二进制的方式写
      iii. ab:二进制的方式追加写
  5. 光标操作 文件接收名.seek(offset,whence)
    a. offset:开始的偏移量,表示从哪里开始读取,如果写0就表示不偏移
    b. whence:
      0:从文件开头开始读
      1:表示从当前光标位置开始读
      2:表示从文件末尾开始