本教程的操作环境:windows7系统,Python 3.9.1,DELL G3电脑。
1、概念
是contextlib模块提供的装饰器用于在不创建类别或单独__的情况下管理函数声明的上下文enter___()方法exit__()方法可以实现上下文管理。
2、注意
装饰器@contextmanager的真正用法不是简化上下文管理器,而是定义上下文管理器的方法,将不是上下文管理器的类别变成上下文管理器。
3、实例
fromcontextlibimportcontextmanager importtime @contextmanager defdemo(label): start=time.time() try: yield finally: end=time.time() print('{}:{}'.format(label,end-start)) withdemo('counting'): n=10000000 whilen>0: n-=1 #counting:1.32399988174
看上面的例子,函数中yield之前的研究所代码类似于上下文管理器__enter__方法内容。yield后的所有代码都是__exit__方法内容。如果执行过程中出现异常,则会触发yield语句。
以上是python中@contextmanager的基本介绍。我相信你对这种直接实现上下文管理器的方法非常感兴趣。阅读文章后,您可以操作上述代码进行体验。