python中“as”语句的含义是什么?

时间:2013-11-18 20:02:11

标签: python flask

我刚刚开始学习Flask框架,并想知道'as'语句的作用是什么?它与'with'语句一起使用。

以下是示例:

def init_db():
with closing (connect_db()) as db:
    with app.open_resource('schema.sql', mode='r') as f:
        db.cursor().executescript(f.read())
    db.commit

1 个答案:

答案 0 :(得分:7)

as关键字用于向几个不同的语句添加子句(例如import);没有“as声明”。

with语句中,这意味着with上下文的值被赋给该变量。准确的解释位于The with statementWith Statement Context ManagersContext Manager Types下的文档中; PEP 343给出了一个更易读的解释(尽管它也有点过时)。


在简单的情况下,对象充当自己的上下文管理器,就像文件一样,或decimal.localcontext,对象被分配给变量。此处fopen('spam')返回的文件:

with open('spam') as f:

在稍微复杂的情况下,上下文管理器提供了一些分配给变量的其他对象。在closing(foo)的情况下,对象是首先给出的foo。在这里,g最终与f完全相同,即使closing(f) 同样的事情:

f = open('spam')
with closing(f) as g:

某些上下文管理器根本不提供任何对象。在这种情况下,正如您所期望的那样,as f会将f分配给None,而您通常没有充分理由使用它。因此,as子句是可选的。例如,使用threading.Lock

with my_lock:

如果您是从头开始构建上下文管理器,那么提供对象(无论self或其他方式)绑定到as目标的方式是从__enter__返回它方法。或者,如果您使用生成器周围的@contextmanager装饰器构建它们,则可以通过yield对象进行构建。