您好,欢迎来到星星旅游。
搜索
您的当前位置:首页python----上下文管理器

python----上下文管理器

来源:星星旅游

with 语句

自定义使用上下文管理器

with语句处理对象必须要有__enter__方法及__exit__方法。并且__enter__方法在语句体(with语句包括起来的代码块)执行之前进入运行,__exit__方法在语句执行完毕退出后自动运行。
对于with的一些使用:

# try:
#     print("123")
#     raise KeyError
# except KeyError as e:
#     # print(e)
#     print("KeyError")
# finally:
#     print("无论有无异常 都执行")

# try:
#     f = open("test.txt","w")
# except Exception as e:
#     print(e)
# finally:
#     print("i am close")
#     f.close()

# with可以自动关闭 释放内存
# with open("test.txt","r") as f:
#     f.read()

# 自定义类是否可以使用上下文管理器

class Demo(object):
    def __enter__(self):
        print("start")
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("end")

    def test(self):
        print("i am i")

with Demo() as d:
    # 调用 __enter__
    d.test()
    # 才会调用 __exit__方法 释放内存
    '''
    start
    i am i
    end
    '''

使用装饰器后 ,就不需要定义__enter__与__exit__这两个函数了:

import contextlib

@contextlib.contextmanager
def file_open(filename):
    print("file open")
    # 函数加上yield 关键字之后 整个函数编程 生成器
    yield {}
    print("file close")

with file_open("test.txt") as f:
    print("file operation")
"""
yeild与return类似  程序遇到yield会将内容进行返回

不同之处
yield在下次访问的时候,, 会接着yield后面的代码继续执行
return时会直接返回退出函数
"""

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- stra.cn 版权所有 赣ICP备2024042791号-4

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务