码迷,mamicode.com
首页 > 编程语言 > 详细

python上下文管理

时间:2017-04-14 12:02:07      阅读:188      评论:0      收藏:0      [点我收藏+]

标签:实现   抛出异常   turn   没有   elf   上下文   开启   sel   语句   

class Context:
def __enter__(self):
print(‘enter context‘)

def __exit__(self, *args, **kwargs):
print(‘exit context‘)
#当一个对象同时实现了 `__enter__`和`__exit__`方法, 那么这个对象就是支持上下文管理的对象
with Context():
print(‘do somethings‘)
print(‘out of context‘)

进入with语句块之前,会执行__enter__方法, 退出with语句块之前,会还行__exit__方法
为什么叫上下文?
with开启一个语句块, 执行这个语句块之前,会执行 __enter__方法, 执行这个语句块之后,会执行__exit__ 方法,
也就是说在这个语句块的前后会执行一些操作

with Context():
raise Exception()
即使with块抛出异常,__enter__和__exit__还是会执行,所以上下文管理是安全的

class Context:
def __enter__(self):
print(‘enter context‘)
return self

def __exit__(self, *args, **kwargs):
print(‘exit context‘)
ctx = Context()
with ctx as c:
print(id(ctx))
print(id(c))
print(c)
`as`子句可以获取`__enter__`方法的返回值


class Context:
def __enter__(self):
print(‘enter context‘)
return ‘haha‘

def __exit__(self, *args, **kwargs):
print(‘exit context‘)
with Context() as s:
print(s)
`as`子句可以获取`__enter__`方法的返回值
`__enter__` 除self之外,不带任何参数
`__exit__`返回值获取不到,没有意意义

 

python上下文管理

标签:实现   抛出异常   turn   没有   elf   上下文   开启   sel   语句   

原文地址:http://www.cnblogs.com/harden13/p/6707930.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!