import contextlib
@contextlib.contextmanager
def make_context():
print "entering"
try:
yield {}
finally:
print "exiting"
with make_context() as value:
print "inside with statement:", value
"""
entering
inside with statement: {}
exiting
"""
@contextlib.contextmanager
def make_context(name):
print "entering",name
yield name
print "exiting",name
with contextlib.nested(make_context('A')) as (c):
print "inside with statement: ",c
"""
entering A
inside with statement: ['A']
exiting A
"""
with contextlib.nested(make_context('A'),make_context("B"),make_context("C")) as (A,B,C):
"""
nested用于创建嵌套的上下文
"""
print "inside with statement: ",A,B,C
"""
entering A
entering B
entering C
inside with statement: A B C
exiting C
exiting B
exiting A
"""
class Door(object):
def __init__(self):
print "__init__()"
def close(self):
print "close()"
return
with contextlib.closing(Door()) as door:
"""
closing执行定义好的close函数
"""
print "inside with statement."
"""
__init__()
inside with statement.
close()
"""