Context Manager

1. Context Manager简介

"Context managers are a way of allocating and releasing some sort of resource exactly where you need it."  Ref[4]

例如:

 with file("/tmp/foo", "w") as foo:
print >> foo, "Hello!"

Context Manager是随with一起引入的。

"A context manager is an object that defines the runtime context to be established when executing a with statement.

The context manager handles the entry into, and the exit from, the desired runtime context for the execution of the

block of code."  Ref[11]

"Typical uses of context managers include saving and restoring various kinds of global state, locking and unlocking

resources, closing opened files, etc." Ref[11]

2. 创建Context Manager

2.1 Context Manager Type

with and context manager

"Python’s with statement supports the concept of a runtime context defined by a context manager. This is implemented

using two separate methods that allow user-defined classes to define a runtime context that is entered before the statement body

is executed and exited when the statement ends. " Ref[6]

context management protocol

"The context management protocol consists of a pair of methods that need to be provided for a context manager

object to define a runtime context:" Ref[6]

 contextmanager.__enter__()

 contextmanager.__exit__(exc_type, exc_val, exc_tb)

contextlib

"Python’s generators and the contextlib.contextmanager decorator provide a convenient way to implement these protocols.

If a generator function is decorated with the contextlib.contextmanager decorator, it will return a context manager

implementing the necessary __enter__() and __exit__() methods, rather than the iterator produced by an

undecorated generator function." Ref[6]

2.2 使用contextlib模块

"the simplest way is using the contextmanager decorator from the contextlib library, and invoking yield in your context manager

function in between the setup and teardown steps." Ref[4]

Ref[4] 中的例子:

 import contextlib
import time @contextlib.contextmanager
def time_print(task_name):
t = time.time()
try:
yield
finally:
print task_name, "took", time.time() - t, "seconds." with time_print("processes"):
[doproc() for _ in range(500)] # processes took 15.236166954 seconds. with time_print("threads"):
[dothread() for _ in range(500)] # threads took 0.11357998848 seconds.

Reference

1. contextlib — Utilities for with-statement contexts

https://docs.python.org/2/library/contextlib.html

2. With Statement Context Managers

https://docs.python.org/2/reference/datamodel.html#context-managers

3. with statement

https://docs.python.org/2/reference/compound_stmts.html#with

4. Introduction to Context Managers in Python (Read Again)

http://eigenhombre.com/2013/04/20/introduction-to-context-managers/

5. Fixture functions using “yield” / context manager integration

https://pytest.org/latest/yieldfixture.html

6. Build-in Types (To Read)

https://docs.python.org/2/library/stdtypes.html#typecontextmanager

7. PEP 343 -- The "with" Statement (To Read)

https://www.python.org/dev/peps/pep-0343/

8. Coding with context managers

http://python3porting.com/improving.html

9. Python: Tips, Tricks and Idioms - Part 2 - Decorators and Context Managers

https://codefisher.org/catch/blog/2015/02/10/python-decorators-and-context-managers/

10. Defining Context Managers the Easy Way

https://www.safaribooksonline.com/library/view/python-cookbook-3rd/9781449357337/ch09s22.html

11. With Statement Context Managers

https://docs.python.org/2/reference/datamodel.html#context-managers

Todo:

http://www.rafekettler.com/magicmethods.html

Python.with.context-manager的更多相关文章

  1. Python之 context manager

    在context manager中,必须要介绍两个概念: with as... , 和 enter , exit. 下文将先介绍with语句,然后介绍 __enter__和exit, 最后介绍cont ...

  2. Python——with语句、context manager类型和contextlib库

    目录 一.with语句 二.上下文管理器 三.contextlib模块 基本概念 上下文管理协议(Context Management Protocol) 包含方法 __enter__() 和 __e ...

  3. Python Study(02)之 Context Manager

    上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围.一旦对象进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存).它 ...

  4. Python上下文管理器(context manager)

    上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围.一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存).它的语 ...

  5. pythonic context manager知多少

    Context Managers 是我最喜欢的 python feature 之一,在恰当的时机使用 context manager 使代码更加简洁.清晰,更加安全,复用性更好,更加 pythonic ...

  6. Android的Context Manager(服务管理器)源码剖析-android学习之旅(99)

    Context Manager介绍 Context Manager对应的进程是servicemanager进程,它先于Service Server和服务客户端运行,进入接收IPC数据的待机状态,处理来 ...

  7. Python - Context Manager 上下文管理器

    什么是上下文管理器 官方解释... 上下文管理器是一个对象 它定义了在执行 with 语句时要建立的运行时上下文 上下文管理器处理进入和退出所需的运行时上下文以执行代码块 上下文管理器通常使用 wit ...

  8. Appium+python自动化9-SDK Manager

    前言 SDK Manager到有哪些东西是必须安装的呢? 一.SDK Manager 1.双击打开SDK Manager界面

  9. 第一个 Python 程序 - Email Manager Demo

    看了一些基础的 Python 新手教程后,深深感觉到 Python 的简洁与强大,这是我的第一个 Python Demo.下面是完整代码与执行截图. 代码: # encoding: utf-8 ''' ...

  10. 六、python中context.get()方法

    例:context.get('variant',False) 意思是如果context中不包括variant 就返回False.

随机推荐

  1. ASP.NET MVC 实现AJAX跨域请求方法《1》

    ASP.NET MVC 实现AJAX跨域请求的两种方法 通常发送AJAX请求都是在本域内完成的,也就是向本域内的某个URL发送请求,完成部分页面的刷新.但有的时候需要向其它域发送AJAX请求,完成数据 ...

  2. PCI Express(六) - Simple transactions

    原文地址:http://www.fpga4fun.com/PCI-Express6.html Let's try to control LEDs from the PCI Express bus. X ...

  3. NHibernate系列文章二十三:NHibernate查询之Criteria查询(附程序下载)

    摘要 上一篇文章介绍了NHibernate HQL,他的缺点是不能够在编译时发现问题.如果数据库表结构有改动引起了实体关系映射的类有改动,要同时修改这些HQL字符串.这篇文章介绍NHibernate面 ...

  4. OpenLayers Map理解

    1,视口坐标的原点在左上角,水平向右为x轴正向,垂直向下为y 轴正向:2,地图坐标原点为初始图层的中心点,水平向右为x轴正向,垂直向上为y轴正向:3,视口中心点永远与地图中心点重合,不一定与瓦片中心点 ...

  5. IS A 和 HAS A的区别

    IS A:一般是用作继承或者接口类.比如:中国人和外国人都是人,重点在:是一个... . HAS A:一般用作对象和他的成员的从属关系.比如:中国人和外国人都有眼睛.耳朵.嘴巴.重点在:有一个... ...

  6. 丰富自己的代码库-SqlServerHelper(Ado)

    设计思路很简单,就是把数据封装为DataTable类,封装了类型转换,使用者可以不必考虑任何类型转换,而使用VC提供的CString即可.封装了按行号查找功能,先看代码 #pragma once #i ...

  7. Jmail发送邮件

    注册jmail windows --> 运行 --> cmd --> cd jmail目录 --> regsvr32 jmail.dll --> 注册成功 public ...

  8. 照片灰蒙蒙?用PS的曲线功能来解决 (转)

    原文地址:http://realjasonc.blog.163.com/blog/static/16475932520107594048957/ 上次,给大家看了几张较为典型的直方图.其实直方图的状态 ...

  9. sharepoint webpart

    SharePoint开发中,不仅仅是WebPart,我们都经常会使用的几个关键位置,如下: GAC: C:\Windows\assembly,也就是部署的位置: ISAPI位置,SharePoint ...

  10. [转]eclipse最佳设置

    设置工作空间的项目编码, 防止出现乱码     Window - Preferences - General - Workspace     将"Text file encoding&quo ...