美文网首页
python上下文管理

python上下文管理

作者: Andy_1ee | 来源:发表于2020-12-21 22:26 被阅读0次

    什么是上下文管理

    上下文:context的直译, 指的是代码执行过程中的前后状态
    上下文管理器:python上下文管理器规定了某个对象的使用范围, 在进入或离开使用范围的时候执行相应的操作,用于资源的获取或释放
    上下文协议:实现了enterexit方法,也就是实现了上下文协议

    上下文管理器的创建

    方法一:

    在python类中实现了enterexit方法后, 调用这个类或者实例化对象,就会生成一个上下文管理器
    上下文管理器配合 with方法使用, 可以自动执行enter方法, 并将enter方法的返回值赋值给 as 后面的从句变量
    参考代码示例如下:

    class MyOpen:
        def __init__(self, path, mode, encoding='utf-8'):
            print('__init__')
            self.open = open(path, mode, encoding=encoding)
    
        def __enter__(self):
            print('__enter__')
            return self.open
    
        def __exit__(self, exc_type, exc_val, exc_tb):
            print('__exit__')
            self.open.close()
    
    with MyOpen('/test.txt', 'r') as f:
        print("coding")
    
    # 代码执行结果
    __init__
    __enter__
    coding
    __exit__
    
    方法二:

    使用contextlib模块实现上下文管理器
    在contextlib模块下有一个 contextmanage方法, 可以将被装饰的对象升级为上下文管理器

    from contextlib import contextmanager
    
    @contextmanager
    def my_open(path, mode, encoding='utf-8'):
        r_f = open(path, mode, encoding=encoding)
        print('file open')
        yield r_f
        print('file close')
        r_f.close()
    
    with my_open(r'/test.txt', 'r') as c_f:
        print(c_f)
    
    # 代码执行结果
    file open
    <_io.TextIOWrapper name='/test.txt' mode='r' encoding='utf-8'>
    file close
    

    上下文管理器的使用场景

    1. 用于资源的获取以及释放
      在获取例如文件句柄, 数据库资源时可以使用上下文管理器, 隐形的获取及释放资源
    2. 用于错误的获取(此方法还未实践)

    相关文章

      网友评论

          本文标题:python上下文管理

          本文链接:https://www.haomeiwen.com/subject/faaknktx.html