第五章_函数 - 图1

第五章_函数与文件

函数

模块化设计

概念

  • 函数的功能封装,以功能为基本单位划分程序

    两个基本要求

  • 紧耦合

    • 功能块内部关系紧密
  • 松耦合

    • 功能块之间耦合度低,便于连接

      基本函数

      函数定义

  • def 函数名(params参数列表):<缩进>”””<缩进>函数文档注释,便于help()函数调用查阅<缩进>”””<缩进>block代码块<缩进>return expression/value返回表达式/值

  • 注意

    • 参数可指定默认值
    • return返回多个值会形成一个元组数据类型(由小括号和逗号组成)
    • 没用return返回值的函数,type(函数名())的结果为NoneType
    • 函数定义不一定放在调用之前
    • 函数中定义的子函数只能在父级函数内调用

      作用

  • 代码复用,减少代码复杂度,防止重复编写、更新代码

    例子-

  • def add(a,b=0): #定义一个加法的函数。有两个变量,其中第二个变量制定了默认值为0,当函数调用时不指定b的参数则以0代入 “”” 说明:此函数主要是计算两个数的加法。当给的两个变量同时是数值或者元组、列表、字符串,但是字典和集合不可以,因为字典和集合没有“+”运算。 1、此函数有两个变量,当仅输入一个变量时,第二个变量默认为0; 2、当输入两个变量时,将是此两个变量的“+”运算。 “”” c = a + b return c add(2,3)

    函数中的变量

    局部变量

  • 只在函数执行过程有效

    全局变量

  • 定义

    • 全局变量指在函数之外定义的变量,在程序的执行全过程都有效。如果我们在函数之中定义需要通过保留字global
  • 函数中定义全局变量

    • 在函数内部使用保留字global定义
    • global 全局变量名

      注意

  • 函数内和函数外即使有同名的变量,函数内的那个同名变量如果没用global声明,也只能算作函数的局部变量

    Lambda匿名函数(行内函数)

    用途-

  • ①只是一个表达式,函数体相对简单

  • ②单行函数,使用Lambda可省略定义函数过程,更精简
  • ③非多次调用函数情况下,Lambda表达式更高效

    格式-

  • 👉lambda 参数:表达式

    例子-

  • 👉定义一个函数g(x,y)=x+yg = lambda x,y : x+y

    • print(g(3,4)) 👉 输出7
  • filter()过滤函数
    • 定义-
      • 👉在给定的条件(参数1-函数)上对某域(参数2-序列)进行过滤将序列每个元素作为参数传递给函数进行判断,返回符合条件的所有元素存放到容器中
    • 例子-
      • 👉#对列表中的个元素是3的倍数进行过滤,并返回符合条件的,但返回的是容器fl = filter(lambda x : x%3 == 0, [1,2,3,4,5,6,7,8,9])
        • list(fl)输出[3,6,9]
  • reduce()累计计算函数

    • 定义-
      • 👉#把函数func()作用在系列Z上累计计算效果类似reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
      • 需要调用functools包
    • 例子-
      • from functools import reduce #从functools包中导入reduce函数a_1 = reduce(lambda a,b: a * b, [1,2,3,4,5,6,7,8,9]) #计算9!a_2 = reduce(lambda a,b: a + b, [1, 2, 3, 4, 5, 6, 7, 8, 9]) #计算1+2+…+9的和

        reduce()函数

        👉课本P45

        练习

        1. 定义函数计算n的阶乘

        文件

        定义

        文件是存储在辅助存储器上的一组数据序列,可以包含任何数据内容。

        文件是数据的集合和抽象

        类型

        文本文件

  • 特点

    • 由单一特定编码的字符组成(有统一的字符编码),可看作存储在磁盘上的长字符串
  • 编码

    • UTF-8编码

      二进制文件

  • 特点

    • 直接由比特0或1组成,没有统一的字符编码
      • 由此只能当作字节流,而不能作为字符串
    • 文件内部数据的组织格式与文件用途有关
      • 如png格式的图片、avi格式的视频文件

        文件的打开

        文本或二进制文件都可用文本或二进制形式打开

  • 文本打开

    • 代码操作
        1. 打开文件
          • 变量名 = open(‘包括文件名的文件路径’,’rt’,encoding = ‘utf-8’)
            • rt表示以文本形式打开,只读
          • with open()
            • 通过with关键字进行打开可以使得Python自行判断文件状态不需被操作时自动关闭,不必手写.close()进行文件关闭
          • 如果只输入文件名,需要把文本文件和代码文件放在同一文件夹中
        1. 读取文件
          • print(变量名.readline())
        1. 关闭文件
          • 变量名.close()
    • 文件通过编码形成——字符串,打印出有含义的字符
  • 二进制形式打开

    • 代码操作
        1. 打开文件
          • 变量名 = open(‘包括文件名的文件路径’,’rb’)
            • rt表示以二进制形式打开
          • 如果只输入文件名,需要把文本文件和代码文件放在同一文件夹中
        1. 读取文件
          • print(变量名.readline())
        1. 关闭文件
          • 变量名.close()
    • 不编码,打印显示——字节流

      打开与关闭

  • 统一步骤

    • 打开
      • 使得当前程序有权操作该文件
      • 文件最初处于存储状态,打开后处于占用状态(占用状态时另一个进程无法对该文件进行操作)
      • 打开不存在的文件会进行文件创建
      • 变量名=open(‘文件路径及文件名’,’打开模式’,encoding = ‘编码格式’)
        • 文件路径
          • 通过/连接或\,因为\是转义字符
            • 或者在引号前+r,直接用\连接即可
        • 打开模式
          • r
            • 只读模式,文件不存在则返回异常
          • w
            • 覆盖模式,文件不存在则创建,存在则完全覆盖原文件
          • x
            • 创建写模式,文件不存在则创建,存在则返回异常
          • a
            • 追加写模式,文件不存在则创建,存在则在原文件最后追加内容
          • b
            • 二进制文件模式
          • t
            • 文本文件模式,默认值
          • +
            • 与r/w/x/a一同使用,在原功能基础上增加同时读写功能
        • 编码格式
          • “去哪国用哪国语言”
            • 需要统一编码格式才能正确执行
              • 否则会出现错误或乱码情况
          • 代码编码格式转换
            • encoding = ‘编码格式’
          • 编码格式常见类型
            • ANSI
              • txt文本的默认格式
            • utf-8
              • python的默认格式
            • gb2312
              • 汉字
    • 操作
      • 文件的读写
        • 文件名.write(内容)
        • 文件名.read(size)
    • 关闭
      • 将文件恢复到存储状态,使得其他程序可以对文件进行操作

        文件的读写

  • 读取

    • 从文件中读入整个文件内容。
      • 存储文件的变量名.read(size = -1)
        • size参数
          • 可选
          • 读取前size长度的字符串或字节流
    • 从文件中读取一行内容
      • 存储文件的变量名.readline(size = -1)
    • 从文件中读取所有行
      • 存储文件的变量名.readlines(hint = -1)
        • 以每行为元素形成一个列表。
        • hint参数
          • 可选
          • 读取hint行
    • 读取指针
      • 文件打开后,文件的读写有一个读取指针,读入内容后读取指针将移动,再次读取的内容将从指针的新位置开始
  • 写入
    • 向文件写入一个字符串或字节流
      • 存储文件的变量名.write(‘写入内容’)
    • 将一个元素为字符串的列表整体写入文件
      • 存储文件的变量名.writelines(lines)