Skip to content

Commit

Permalink
Update context_managers/implement_as_generator.md
Browse files Browse the repository at this point in the history
  • Loading branch information
suqi committed Dec 15, 2015
1 parent f4e2530 commit 7fc7e07
Showing 1 changed file with 7 additions and 3 deletions.
10 changes: 7 additions & 3 deletions context_managers/implement_as_generator.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
# 实现成生成器
# 基于生成器的实现

我们还可以基于装饰器(decorators)和生成器(generators)来实现上下文管理器。
Python有个```contextlib```模块专门用于这个目的。我们可以使用一个生成器函数来实现一个上下文管理器,而不是使用一个类。
让我们看看一个基本的,没用的例子:

我们还可以使用装饰器(decorators)和生成器(generators)来实现上下文管理器。Python有个```contextlib```模块专门用于这个目的。我们可以使用一个生成器函数来实现一个上下文管理器,而不是使用一个类。让我们看看一个基本的,没用的例子:
```python
from contextlib import contextmanager

Expand All @@ -10,7 +13,8 @@ def open_file(name):
yield f
f.close()
```
OK啦!这个实现方式看起来更加直观和简单。然而,这个方法需要关于生成器,```yield```和装饰器的一些额外知识。在这个例子中我们还没有捕捉可能产生的任何异常。它的工作方式和之前的方法是大部分相同的。

OK啦!这个实现方式看起来更加直观和简单。然而,这个方法需要关于生成器、```yield```和装饰器的一些额外知识。在这个例子中我们还没有捕捉可能产生的任何异常。它的工作方式和之前的方法是大部分相同的。

让我们小小地剖析下这个方法。
1. Python解释器遇到了```yield```关键字。因为这个缘故它创建了一个生成器而不是一个普通的函数。
Expand Down

0 comments on commit 7fc7e07

Please sign in to comment.