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
本站由北京市万商天勤律师事务所王兴未律师提供法律服务