异常处理机制
try:
可能出现异常的程序代码
except (异常类型)BaseException as e:
发生异常后执行的代码
else:
未发生异常执行的代码
finally:
无论是否发生异常,一定会执行的代码
- 常见异常类型
- ZeroDivisionError: 除数为0异常
- IndexError: 序列中没有此索引
- KeyError:映射中没有此键
- NameError: 未声明对象
- SyntaxError:python语法错误
- ValueError:传入无效的参数
- Traceback模块
可以打印异常信息
Traceback.print_exc()
类与对象
-
创建类
class 类名: pass
类当中有:
类属性:在变量名前加__后,该属性就变为了私有属性变量名 = 值
实例方法;
def 方法名(self): pass
静态方法; 使用@staticmethod进行修饰的方法
@staticmethod def 方法名(): pass
类方法;使用@classmethod进行修饰的方法
@classmethod def 方法名(cls): pass
初始化方法;可以对属性进行赋值
def __init__(self, name, age): self.name = name self.age = age
-
创建对象
实例名 = 类名(参数)
类属性:该类的所有对象都可以进行调用
类方法和静态方法使用类名直接调用 -
动态绑定属性和方法
实例名.想要增加的属性 = 值
会为这个对象自动加上该属性def 方法名(): pass 实例名.方法名 = 方法名
会给这个对象添加上该方法
-
封装,继承,多态
- 若对象中的某个属性不想被外部访问,可以在该属性前加上__让其变为私有属性
self.__name = name
该name属性外部不可以访问 - 继承的语法:
class 子类类名(父类1,父类2...): pass
子类继承父类后,子类需要在初始化方法中调用父类的初始化方法
在引用inspect模块后,可以使用inspect.getmro(对象名)来查看类的搜索顺序- 可以通过重写__str__方法使得在输出该对象时,可以直接输出属性,相当于Java中的toString方法
def __str__(self): return '我的名字是{0},年龄是{1}'.format(self.name, self.age)
- 多态:只要子类对象继承父类对象,且子类重写了父类的方法,就可以通过传入了继承了父类的子类,让父类来调用该方法
- 静态语言和动态语言
- 静态语言实现多态的三个必要条件:
继承
方法重写
父类引用指向子类对象 - 动态语言
不关心对象是什么类型,只关心对象的行为
- 静态语言实现多态的三个必要条件:
- 若对象中的某个属性不想被外部访问,可以在该属性前加上__让其变为私有属性
-
特殊的方法和属性
将对象当做一个函数使用需要重写__call__()方法
实例名.__dict__
得到的是该对象的属性
类名.__dict__
得到的是该类的方法 -
类的深拷贝和浅拷贝
- 浅拷贝:
python中的拷贝一般是浅拷贝,拷贝时,对象包含的子对象内容不拷贝,因此,源对象与拷贝对象会引用一个对象 - 深拷贝
使用copy模块中的deepcopy函数,递归拷贝对象中包含的子对象,源对象和拷贝对象中的子对象也不相同
- 浅拷贝:
模块
一个模块中可以包含N多个函数
在python中一个扩展名为.py的文件就是一个模块
使用模块的好处:
1. 方便其他程序和脚本的导入并使用
2. 避免函数名和变量名冲突
3. 提高代码的可维护性
4. 提高代码的可重用性
- 导入模块
import 模块名称 [as 别名]
from 模块名称 import 函数/变量/类
- 常用的内置模块
文件的读写操作
-
创建文件对象,使用内置的open()函数
file = open(filename [,mode,encoding])
file:被创建的文件对象
open:创建文件对象的函数
filename:要创建或打开的文件名称
mode:打开模式,默认为只读
encoding:文件的编码格式,默认为gkb -
文件打开模式
-
文件对象的常用方法
-
with语句
可以自动管理上下文资源,不论什么原因跳出with块,都能确保文件的正确关闭,以此来达到释放资源的目的with open('a.txt', 'r') as file: print(file.read())
可以不用加文件的关闭操作,在退出with语句时,会自动进行关闭
-
os模块操作目录
-
os.path模块操作目录
正则表达式
-
使用re模块中的compile方法创建一个匹配器
如:pattern = re.compile('\d{4}')
创建完匹配器对象后,就可以使用search方法或者match方法去字符串中进行匹配,如匹配到则会返回第一次匹配到的下标位置和值
如:result = pattern.search(字符串)
-
或者直接使用模块的match方法或search方法
result = re.match(匹配器,字符串)
即可得到匹配到的值
result.span()
可以得到下标位置
result.group()
可以得到值 -
对于分组后的匹配值
可以使用group(下标)来的到每个分组的值,
下标为0时,为匹配到的整个字符串
下标为1时,为匹配到的第一个分组中的字符串
… -
给标签起名
(?P<名字>正则) (?P = 名字)
成对进行使用