IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> python中with的用法 上下文管理器 -> 正文阅读

[Python知识库]python中with的用法 上下文管理器

如何理解上下文管理器, 那就是有先 有后, 中间是要处理的东西。
举个例子:
别墅独立小院, 是不是有个大门。每天进大门然后出大门(有先有后),中间呢 是你在这个小院里操作各种内容,比如打水。

上下文管理器指符合上下文协议的一个类,类中实现了__enter__方法 和 exit 方法。 在一段代码执行前, 先执行__enter__中的代码用于预处理,然后执行 with 中间的代码,最后执行完这段代码之后再执行 exit 中的代码进行清理工作。
常见的如:
文件的操作:打开文件,关闭文件
打开数据库,关闭数据库
入栈,出栈
都可以用上下文管理器来完成。
具体可以参考官网里这块的代码实现逻辑来加深理解。

上下文管理器格式:

class A():
    def __enter__(self):
        print('连接')
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print('断开连接')
        if(exc_tb):
            print('出现异常')
        else:
            print('无异常')
        return True

__enter__方法实现资源的连接过程
__exit__方式实现了资源的断开过程

with语句基本结构

with A() as b:
    # 相关操作代码放这里
-------------------------
with A():
    # 相关操作代码放这里

在with语句中的操作代码执行前,先执行__enter__中的代码;操作代码执行完后,再执行__exit__中的代码
enter=>with=>exit

这段代码里需要理解一下as b
在 with A() as b 中,b的值为__enter__方法的返回值,一般情况下会写self即返回上下文管理器对象本身,但是也可以返回其他内容
__exit__方法中的参数除了self外还必须有exc_type,exc_val,exc_tb;当操作代码部分没有出现异常时,三个参数的值都为空,当操作代码部分出现异常时分别传入异常的类型、信息、错误堆栈
__exit__的返回值可以是True或False,当返回True时若操作代码出现异常则在with语句外将不会给出异常(在__exit__中处理异常),当返回False时若操作代码出现异常则在with语句外给出异常(由外部处理异常)

举个数据库的简单例子

class DataBase():
    def query(self):
        print('查询数据库')

    def __enter__(self):
        print('连接数据库')
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print('断开数据库连接')
        if(exc_tb):
            print('出现异常')
        else:
            print('无异常')
        return True

with DataBase() as db:
    db.query()

在这里插入图片描述

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 12:06:36  更:2022-04-04 12:10:27 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:24:49-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码