使用with语句时,通常需要定义一个类,并且实现 __enter__ 和 __exit__方法。这样就导致了代码很冗长。
而且为了使用with,必须定义一个类,这样会使代码的可读性并不太好。
下面使一个例子
class Case():
def __enter__():
return "result"
def __exit__():
return True
//调用方案
with Case() as case:
print(case);// -> result
对于类似的情况。Python提供了contextlib内置函数库,用于简化上下文管理器的编写
import contextlib
@contextlib.contextmanager
def Case():
print("__enter__")
yield "result"
print("__exit__")
#调用方案
with Case() as case:
print(case)
# __enter
# result
# __exit__
这种方案的关键是yield语句。yield语句之后为 __exit__的实现,剩下的代码为__enter__的实现。
网友评论