闭包与装饰器
闭包概念:
闭包(Closure)是指在一个嵌套的函数内部访问其外部函数中定义的变量或函数的能力
闭包通常由两个部分组成:内部函数和与其相关的环境变量。
内部函数是在外部函数中定义的函数。
环境变量是在外部函数中定义的变量或其他函数对象
闭包特点:
内部函数可以访问外部函数中定义的变量和参数,即使外部函数执行完毕
闭包可以在外部函数的作用域之外被调用和执行
闭包可以访问并修改外部函数中的局部变量,使其具有持久性
闭包使用场景
保护私有变量:
延迟执行:
缓存数据:
外函数变量在内函数修改,要在内函数中使用 nonlocal
关键字声明该变量为外函数的变量
计数器函数
装饰器
装饰器概念:
装饰器使用@
符号加上装饰器名称,用于修改其他函数的行为,并且在不修改原始函数定义和调用的情况下添加额外的功能,装饰器本质上是一个闭包函数
装饰器使用:
由于装饰器本质上就是一个闭包函数,所以在使用自定义装饰器之前,需要先定义一个用来做为装饰器的闭包
装饰器本质:
装饰器提供了一种简洁而优雅的方式(语法糖)来扩展和修改函数或类的功能。其本质就是函数的使用
如果需要装饰器可以装饰任何函数,那么就需要解决被装饰函数的参数及返回值的问题。
可以通过可变参数和在内函数中返回被装饰函数执行结果的形式解决此问题
带参数装饰器
可以在通用装饰器外,再定义一层函数,用来接收装饰器的参数
装饰器原理:装饰器传参的本质就是链式语法的多次函数调用
文件操作
打开文件
Python 使用 open
方法用于打开一个文件,并返回文件对象,在对文件进行处理过程都需要使用到这个函数,如果该文件无法被打开,会抛出 OSError
一般使用简化格式
open(file, mode=‘r’, encoding=None)
- file: 必需,指定打开文件的路径(相对或者绝对路径)。
- mode: 可选,文件打开模式,默认为
r
只读模式 - encoding: 一般使用
utf8
mode参数表:
r:只读方式打开文件
w:以写的方式打开文件
a:以追加方式打开文件
b:二进制模式
读写文件
常用函数
文件写入:
write()
方法用于向文件中写入指定字符串。如果文件打开模式为b
,则要将字符串转换成 bytes
类型的二进制字符串,函数返回成功写入数据的长度
writelines()
方法用于向文件中写入一序列的字符串,接收一个列表
read()
方法用于从文件读取指定的字节数,如果未给定或为负则读取所有
readline()
方法用于从文件读取整行,包括 \n
字符。如果指定了一个非负数的参数,则返回指定大小的字节数,包括 \n
字符
readlines()
方法用于读取所有行(直到结束符 EOF)并返回列表
错误分析与调试
错误分析步骤:
1.错误所在文件
2.错误所在的行
3.错误出现的代码
4.错误类型
5.错误的原因
调试可以打印 print()
语句输出一些信息
pychrome调试提供 debug调试
打断点,遇到断点程序就会暂停执行,通过点击控制按钮,控制程序向下执行。
异常处理
try/except
语句用来检测 try
语句块中的错误,从而让 except
语句捕获异常信息并处理
捕捉多个异常
如果一段代码可能会发生多种异常,并想在程序中都想处理,可以使用多个 except
分别捕捉异常。
可以捕捉 Exception
异常类型来处理所有的异常,如果有多个时,必须放在最后捕捉该异常,否则无法处理到其它异常
Python 使用 else
在处理在代码无异常时的后续操作
Python 使用 finally
处理无论异常是否发异,都要执行的代码,一般用来完成清理工作
面对对象概念
面对对象编程是一种基于对象的编程范式。
通过对象之间的交互和消息传递,来完成任务和解决问题
特点:
封装性
继承性
多态性
类和对象:类是对象的模板,描述对象的属性方法
信息传递:面向对象编程通过消息传递的方式实现对象之间的交互和通信。
面向过程编程与面向对象编程的区别
抽象程序
封装性
继承性质
多态性质
设计思想不同
类和对象
类的定义;
在面向对象编程中,类(Class)是一种定义现实事物属性和方法的蓝图或模板。类描述了现实事物的特征(属性)和行为(方法)。可以把类看作是创建现实事物的原型
类是现实事物的抽象,它定义了一类具有相似特征和行为的事物的通用结构和行为。类提供了对象所需的状态和行为,并定义了对象的初始化、操作和销毁等方法
对象定义
在面向对象编程中,对象(Object)是类的一个实例。对象是具体存在的,具有状态和行为的实体
对象有两个特征关键特征:状态和行为
状态:对象的状态由它的属性(也称为成员变量)决定,属性表示了对象的特点和特征
行为::对象的行为由它的方法(也称为成员函数)决定,方法表示了对象能够执行的操作和行为
对象是类的实例,可以根据类的定义创建多个对象。每个对象都有自己的属性值,在相同的类下,不同的对象可以具有不同的状态和行为。
通过对象,我们可以对数据进行封装和操作,通过对象之间的交互和消息传递,实现程序的逻辑和功能
类的定义:
Python 使用 class
关键字来创建一个新类,class
之后为类的名称
实例对象:
实例对象本质上就是使用自定义类型去声明一个变量
实例属性
动态绑定
Python 中的属性变量都是使用动态绑定的方式绑定到实例对象上的。
构造方法
构造方法__init__(self)
在实例对象时自动调用, self
参数不需要手动传参,该参数在实例对象时,由解释器自动传入被实例的对象
实例方法
实例方法默认携带一个参数self
, 在程序执行时,由解释器自动传入调用该方法的实例对象,通过此参数,可以在当前实例方法中调用其它实例方法或属性
类属性
类对象与实例对象不同,可以理解为实例对象是由类对象复制而来,每个实例对象之间具有数据独立性
类属性特征
- 在类中直接定义的变量为类属性
在方法中使用类属性时,需要使用类名做为前缀