python基础---上下文管理器

With上下文管理器

在使用系统资源比如说文件, socket, 数据库连接的时候, 打开这一些资源以后需要关闭, 不关闭的话, 文件的打开数量等资源的数量是有限的

如果一个为文件关闭的打开的过程中报错, 这一个文件的关闭可能出现问具体, 可以使用try进行异常捕获, 也可以使用with语句

上下文

实际是代码的执行环境

上下文管理器

任何一个实现了__enter__()__exit()__两个方法的对象都可以使用with进行管理

class File(object):
    def __init__(self, filename, mode) -> None:
        self.filename = filename
        self.mode = mode
    
    def __enter__(self):
        print("Opening the file...")
        self.file = open(self.filename, self.mode)
        return self.file
    
    def __exit__(self, *args):
        # 这一个函数在调用的时候传入参数, 所以需要*args去获取这些参数
        print("Closing the file...")
        self.file.close()

with File('test.txt', 'w') as f:
    print("Writing to the file...")
    f.write("Hello, World!")

with开始的时候会调用__enter__, 离开的时候会使用__exit__

PS E:\JHY\python\2024-4-22> python -u "e:\JHY\python\2024-4-22\main.py"
Opening the file...
Writing to the file...      
Closing the file...

更简单的调用

from contextlib import contextmanager

@contextmanager
def my_context_manager():
    print('Enter')
    yield
    print('Exit')

with my_context_manager():
    print('Inside')
PS E:\JHY\python\2024-4-22> python -u "e:\JHY\python\2024-4-22\main.py"
Enter
Inside
Exit
from contextlib import contextmanager

@contextmanager
def my_open(filename, mode):
    f = open(filename, mode)
    yield f
    f.close()

with my_open('test.txt', 'r') as f:
    print(f.readlines())
PS E:\JHY\python\2024-4-22> python -u "e:\JHY\python\2024-4-22\main.py"
['1.Hello\n', '2.World\n']

实际使用的时候可以直接with oprn(filename, mode) as f:这一个f里面已经实现了这两个规则

总结

在开发里面使用系统资源一定需要关闭的时候, 为了避免资源在异常的时候没有正常的关闭, 所以使用这一个用于管理资源

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
八天Python从入门到精通是一套针对Python编程语言的学习教程,旨在帮助初学者快速掌握Python基础知识并逐步深入学习高级主题。以下是该教程的大致内容: 第一天:Python基础 - Python的历史和特点 - 安装Python环境 - 变量和数据类型 - 运算符和表达式 - 条件语句和循环语句 第二天:函数和模块 - 函数的定义和调用 - 函数参数和返回值 - 模块的导入和使用 - 常用内置函数的介绍 第三天:数据结构 - 列表、元组、字典和集合的使用 - 列表和字典的常用操作方法 - 列表推导式和字典推导式 第四天:文件操作和异常处理 - 文件的读写操作 - 异常的处理和捕获 - 上下文管理器的使用 第五天:面向对象编程 - 类和对象的概念 - 类的定义和实例化 - 继承、多态和封装的概念 - 魔术方法和属性装饰器 第六天:模块和包管理 - 模块的创建和使用 - 包的创建和使用 - 导入模块和包的方法 - 第三方库的安装和使用 第七天:网络编程和数据库操作 - 网络编程的基本概念 - 使用socket进行网络通信 - 数据库的连接和操作 - SQL语句的执行和结果处理 第八天:高级主题 - 多线程和多进程编程 - 正则表达式的使用 - 异步编程和协程 - Python的Web开发框架介绍 以上是八天Python从入门到精通教程的大致内容,通过学习这些内容,你将能够掌握Python基础知识并具备一定的编程能力。如果你有任何关于Python的问题,欢迎继续提问。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值