<p>我建议两个有趣的讲座:</p>
<ul>
<li><a href="http://www.python.org/dev/peps/pep-0343/" rel="nofollow noreferrer">PEP 343</a>“with”语句</li>
<li><a href="http://effbot.org/zone/python-with-statement.htm" rel="nofollow noreferrer">Effbot</a>了解Python的
“with”语句</li>
</ul>
<p><strong>1.</strong>
<code>with</code>语句用于用上下文管理器定义的方法包装块的执行。这样就可以封装常见的<code>try...except...finally</code>使用模式,以方便重用。</p>
<p><strong>2.</strong>
你可以这样做:</p>
<pre><code>with open("foo.txt") as foo_file:
data = foo_file.read()
</code></pre>
<p>或者</p>
<pre><code>from contextlib import nested
with nested(A(), B(), C()) as (X, Y, Z):
do_something()
</code></pre>
<p>或(Python 3.1)</p>
<pre><code>with open('data') as input_file, open('result', 'w') as output_file:
for line in input_file:
output_file.write(parse(line))
</code></pre>
<p>或者</p>
<pre><code>lock = threading.Lock()
with lock:
# Critical section of code
</code></pre>
<p><strong>3.</strong>
我在这里没有看到任何反模式。<br/>
引用<a href="https://www.diveinto.org/python3/files.html#with" rel="nofollow noreferrer">Dive into Python</a>:</p>
<blockquote>
<p><strong>try..finally is good. with is better.</strong></p>
</blockquote>
<p><strong>4.</strong>
我想这与程序员使用其他语言的<code>try..catch..finally</code>语句的习惯有关。</p>