python contextManager详解

原创 2016年08月29日 16:16:00
contextlib.contextmanager(func)

This function is a decorator that can be used to define a factory function for with statement context managers, without needing to create a class or separate __enter__() and __exit__() methods.

A simple example (this is not recommended as a real way of generating HTML!):

from contextlib import contextmanager

@contextmanager
def tag(name):
    print "<%s>" % name
    yield
    print "</%s>" % name

>>> with tag("h1"):
...    print "foo"
...
<h1>
foo
</h1>

The function being decorated must return a generator-iterator when called. This iterator must yield exactly one value, which will be bound to the targets in the with statement’s as clause, if any.

At the point where the generator yields, the block nested in the with statement is executed. The generator is then resumed after the block is exited. If an unhandled exception occurs in the block, it is reraised inside the generator at the point where the yield occurred. Thus, you can use a try...except...finally statement to trap the error (if any), or ensure that some cleanup takes place. If an exception is trapped merely in order to log it or to perform some action (rather than to suppress it entirely), the generator must reraise that exception. Otherwise the generator context manager will indicate to the with statement that the exception has been handled, and execution will resume with the statement immediately following the with statement.

Python学习笔记(五)-- 上下文管理器(Context Manager)

定义 如何使用 如何创建1.定义写代码时,我们希望把一些操作放到一个代码块中,这样在代码块中执行时就可以保持在某种运行状态,而当离开该代码块时就执行另一个操作,结束当前状态;所以,简单来说,上下文管理...
  • eternity1118_
  • eternity1118_
  • 2016年10月11日 18:20
  • 946

python3学习笔记:多进程分布式小例子

最近一直跟着廖大在学Python,关于分布式进程的小例子挺有趣的,这里做个记录。分布式进程Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到...
  • xionghuixionghui
  • xionghuixionghui
  • 2017年03月30日 18:18
  • 2414

@contextmanager:Python实现with结构的好方法

常见with结构常见的with结构是在进行文件操作时,比如# 中规中矩的写法 f = open("test.txt", "w") f.write("hello world!") f.close()# ...
  • qq_30242609
  • qq_30242609
  • 2016年10月25日 20:13
  • 1042

十六、Python 上下文管理 Context Manager

要使用 with 语句,首先要明白上下文管理器这一概念。有了上下文管理器,with 语句才能工作。下面是一组与上下文管理器和with 语句有关的概念。 上下文管理协议(Context Managem...
  • alvine008
  • alvine008
  • 2015年05月05日 15:22
  • 5291

python with contextmanager

with file('test.py','r') as f :     print f.readline()     with的作用,类似try...finally...,提供一种...
  • qq550764107
  • qq550764107
  • 2014年03月08日 13:04
  • 733

Python菜鸟晋级05----with....as....(上下文管理器)

介绍         上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围。一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分...
  • a359680405
  • a359680405
  • 2015年01月11日 10:39
  • 2541

python中关于with及contextlib的用法

平常Coding过程中,经常使用到的with场景是(打开文件进行文件处理,然后隐式地执行了文件句柄的关闭,同样适合socket之类的,这些类都提供了对with的支持): ? ...
  • q454684431
  • q454684431
  • 2013年08月19日 15:50
  • 2557

用python写的一个对象池类

前几天用python写了一个对象池类的代码,可以限制子类的对象生成数量,不同子类的容量是独立的,可动态设置。源码:(instancepool.py)class PoolSizeError:    pa...
  • zeyata
  • zeyata
  • 2006年08月25日 18:00
  • 920

python装饰器、with和contextmanager

1,装饰器:  装饰器是一种简单的记号而已,有如下等价的转换规则(带不带参数的装饰器都一样,只要是一个可调用对象即可)。 @foo def bar:     pass 等价于: x = f...
  • u010138758
  • u010138758
  • 2017年02月21日 18:41
  • 243

Python @contextmanager修饰器

开发者可以使用内置的contextlib模块来处理自己所编写的对象和函数,使它们能够支持with语句。该模块提供了名为contextmanager的修饰器。函数只需要经过contextmanager修...
  • u011019726
  • u011019726
  • 2017年11月30日 10:37
  • 24
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:python contextManager详解
举报原因:
原因补充:

(最多只允许输入30个字)