Python.with.context-manager
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的更多相关文章
- Python之 context manager
在context manager中,必须要介绍两个概念: with as... , 和 enter , exit. 下文将先介绍with语句,然后介绍 __enter__和exit, 最后介绍cont ...
- Python——with语句、context manager类型和contextlib库
目录 一.with语句 二.上下文管理器 三.contextlib模块 基本概念 上下文管理协议(Context Management Protocol) 包含方法 __enter__() 和 __e ...
- Python Study(02)之 Context Manager
上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围.一旦对象进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存).它 ...
- Python上下文管理器(context manager)
上下文管理器(context manager)是Python2.5开始支持的一种语法,用于规定某个对象的使用范围.一旦进入或者离开该使用范围,会有特殊操作被调用 (比如为对象分配或者释放内存).它的语 ...
- pythonic context manager知多少
Context Managers 是我最喜欢的 python feature 之一,在恰当的时机使用 context manager 使代码更加简洁.清晰,更加安全,复用性更好,更加 pythonic ...
- Android的Context Manager(服务管理器)源码剖析-android学习之旅(99)
Context Manager介绍 Context Manager对应的进程是servicemanager进程,它先于Service Server和服务客户端运行,进入接收IPC数据的待机状态,处理来 ...
- Python - Context Manager 上下文管理器
什么是上下文管理器 官方解释... 上下文管理器是一个对象 它定义了在执行 with 语句时要建立的运行时上下文 上下文管理器处理进入和退出所需的运行时上下文以执行代码块 上下文管理器通常使用 wit ...
- Appium+python自动化9-SDK Manager
前言 SDK Manager到有哪些东西是必须安装的呢? 一.SDK Manager 1.双击打开SDK Manager界面
- 第一个 Python 程序 - Email Manager Demo
看了一些基础的 Python 新手教程后,深深感觉到 Python 的简洁与强大,这是我的第一个 Python Demo.下面是完整代码与执行截图. 代码: # encoding: utf-8 ''' ...
- 六、python中context.get()方法
例:context.get('variant',False) 意思是如果context中不包括variant 就返回False.
随机推荐
- GNS3 桥接虚拟网卡 telnet 实验
网上很多桥接本地网卡的,一直测试不通.无奈,本人桥接vmware 虚拟网卡通! 1: 2: 3:telnet 加密实验 R1(config)#line vt R1(config)#line vty 0 ...
- 重置zend studio 默认设置的方法
转载自:http://www.zendstudio.net/archives/reset-the-zend-studio-settings/ 这个方法类似于手机的"恢复出厂设置"的 ...
- 在 Visual Studio 中调试时映射调用堆栈上的方法
本文转自:https://msdn.microsoft.com/zh-cn/library/dn194476.aspx 1.创建代码图,以便在调试时对调用堆栈进行可视化跟踪. 你可以在图中进行标注以跟 ...
- [QDB] 幽灵分享:QDataSet+TQMSSQLConverter 实战技巧
转载自QDAC官网网站,文章发现问题可能随时更新,最新版本请访问:http://blog.qdac.cc/?p=3066 [注]本文由网友 幽灵 分享,由 swish 整理并重新编辑.1.将A数据库A ...
- windows下多字节和宽字节转换
先简单说下什么是多字节和宽字节. 多字节是指使用多个字节(1-3)表示一个字符.比如gbk使用英文占一个字节,中文占2个,这个就是多字节了.utf-8是使用1-3个字节表示字符.还有big5等等. 宽 ...
- 使用python的redis 实现消息的pub/sub功能
直接上代码: 首先需要明确的是,客户端向服务端去发送消息,服务端只需要订阅是哪些各频道即可,然后客户端向这些个频道发送消息 在客户端的代码: #!/usr/bin/env python #coding ...
- VUE 入门基础(3)
三,模板语法 Vue将模板编译成虚拟DOM渲染函数,结合响应系统,在应用状态改变时,vue能够智能地计算出重新渲染组件的最小代价并DOM操作上. 插值,文本 数据绑定常见的形式就是使用"Mu ...
- mobx源码解读1
mobx是redux的代替品,其本身就是一个很好的MVVM框架.因此花点力气研究一下它. 网上下最新的2.75 function Todo() { this.id = Math.random() mo ...
- ActiveMQ学习笔记(5)——使用Spring JMS收发消息
摘要 ActiveMQ学习笔记(四)http://my.oschina.net/xiaoxishan/blog/380446 中记录了如何使用原生的方式从ActiveMQ中收发消息.可以看出,每次 ...
- openvpn配置教程
openvpn配置教程 本文是为解决本地服器能从外网访问web页,从新改写(临摹) 烂泥:ubuntu 14.04搭建OpenVPN服务器这篇文章 腾讯云为服务器,本地服务器为客户端 一.服务器安装o ...