非常教程

Python参考手册

内置类型 | Built-in Types

Types: 11. Context Manager Types

11. Context Manager Types

2.5版本中的新功能。

Python的with语句支持由上下文管理器定义的运行时上下文的概念。这是通过使用两个独立的方法实现的,它们允许用户定义的类定义在执行语句正文前输入的运行时上下文,并在语句结束时退出。

上下文管理协议由一对需要被提供用于上下文管理器对象来定义一个运行时环境的方法:

contextmanager.__enter__()

输入运行时上下文并返回此对象或与运行时上下文相关的另一个对象。此方法返回的值绑定到使用此上下文管理器aswith语句子句中的标识符。

一个返回自身的上下文管理器的例子是一个文件对象。文件对象从__enter __()返回,以允许open()with语句中用作上下文表达式。

返回相关对象的上下文管理器的示例是返回的对象decimal.localcontext()。这些管理器将激活的小数上下文设置为原始小数上下文的副本,然后返回副本。这允许对with语句正文中的当前小数上下文进行更改,而不影响with语句外的代码。

contextmanager.__exit__(exc_type, exc_val, exc_tb)

退出运行时环境并返回一个布尔标志,指示是否应该抑制发生的任何异常。如果执行with语句正文时发生异常,则参数将包含异常类型,值和追溯信息。否则,所有三个参数都是None

从此方法返回一个真值将导致with语句禁止该异常,并继续执行语句之后的with语句。否则在该方法执行完成后异常继续传播。在执行此方法期间发生的异常将替换发生在with语句正文中的任何异常。

传入的异常不应该显式重新显示 - 相反,此方法应该返回一个false值,以指示该方法已成功完成,并且不希望抑制引发的异常。这允许上下文管理代码(例如contextlib.nested)容易地检测__exit__()方法是否实际上已经失败。

Python定义了几个上下文管理器来支持简单的线程同步,及时关闭文件或其他对象,并简化对活动的十进制算术上下文的操作。特定的类型没有特别对待它们的上下文管理协议的实现。有关contextlib示例,请参阅模块。

Python的生成器和contextlib.contextmanager 装饰器提供了实现这些协议的便捷方式。如果一个生成器函数用contextlib.contextmanager装饰器修饰,它将返回一个实现必要__enter__()__exit__()方法的上下文管理器,而不是由未修饰的生成器函数生成的迭代器。

请注意,Python / C API中的Python对象的类型结构中没有任何这些方法的特定插槽。想要定义这些方法的扩展类型必须提供它们作为普通的Python可访问方法。与设置运行时环境的开销相比,单个类字典查找的开销可以忽略不计。

Python

Python 是一种面向对象的解释型计算机程序设计语言,由荷兰人 Guido van Rossum 于1989年发明,第一个公开发行版发行于1991年。 Python 是纯粹的自由软件, 源代码和解释器 CPython 遵循 GPL 协议。Python 语法简洁清晰,特色之一是强制用空白符( white space )作为语句缩进。

主页 https://www.python.org/
源码 https://github.com/python/cpython
版本 2.7
发布版本 2.7.13

Python目录

1.内置常量 | Built-in Constants
2.内置例外 | Built-in Exceptions
3.内置函数 | Built-in Functions
4.内置类型 | Built-in Types
5.编译器 | Compiler
6.加密 | Cryptography
7.数据压缩 | Data Compression
8.数据持久性 | Data Persistence
9.数据类型 | Data Types
10.调试和分析 | Debugging & Profiling
11.开发工具 | Development Tools
12.文件和目录访问 | File & Directory Access
13.文件格式 | File Formats
14.构架 | Frameworks
15.输入 | Importing
16.输入/输出 | Input/ouput
17.国际化 | Internationalization
18.网络 | Internet
19.网络数据 | Internet Data
20.翻译 | Interpreters
21.语言 | Language
22.记录 | Logging
23.Mac OS
24.MS Windows
25.多媒体 | Multimedia
26.联网 | Networking
27.数字与数学 | Numeric & Mathematical
28.操作系统 | Operating System
29.可选操作系统 | Optional Operating System
30.限制执行 | Restricted Execution
31.运行 | Runtime
32.SGI IRIX
33.软件包装与分销 | Software Packaging & Distribution
34.字符串 | String
35.结构化标记 | Structured Markup
36.Tk
37.Unix
38.Python 简介
39.Python pass 语句
40.Python 循环嵌套
41.Python 运算符
42.Python log10() 函数
43.Python log() 函数
44.Python floor() 函数
45.Python fabs() 函数
46.Python exp() 函数
47.Python cmp() 函数
48.Python ceil() 函数
49.Python abs() 函数
50.Python Number(数字)
51.Python pow() 函数
52.Python modf() 函数
53.Python min() 函数
54.Python max() 函数
55.Python asin() 函数
56.Python acos() 函数
57.Python uniform() 函数
58.Python shuffle() 函数
59.Python seed() 函数
60.Python random() 函数
61.Python randrange() 函数
62.Python choice() 函数
63.Python sqrt() 函数
64.Python round() 函数
65.Python radians() 函数
66.Python degrees() 函数
67.Python tan() 函数
68.Python sin() 函数
69.Python hypot() 函数
70.Python cos() 函数
71.Python atan2() 函数
72.Python atan() 函数
73.Python 元组
74.Python 列表(List)
75.Python 字符串
76.Python 字典(Dictionary)
77.Python 日期和时间
78.Python 函数
79.Python 模块
80.Python capitalize()方法
81.Python center()方法
82.Python count() 方法
83.Python expandtabs()方法
84.Python endswith()方法
85.Python encode()方法
86.Python decode()方法
87.Python find()方法
88.Python index()方法
89.Python 异常处理
90.Python isspace()方法
91.Python isnumeric()方法
92.Python islower()方法
93.Python isdigit()方法
94.Python isalpha()方法
95.Python isalnum()方法
96.Python isupper()方法
97.Python istitle()方法
98.Python min()方法
99.Python max()方法
100.Python maketrans()方法