一段基本的 with 表达式,其结构是这样的:

with EXPR as VAR:
BLOCK

EXPR 可以是任意表达式; as VAR 是可选的。其一般的执行过程是这样的:

  • 计算 EXPR ,并获取一个上下文管理器。
  • 上下文管理器(上下文管理器,实现了 __exit__/__enter()__/__exit()__方法的类的实例化对象)的__exit()__方法被保存起来用于之后的调用。
  • 调用上下文管理器的__enter()__方法。
  • 如果 with 表达式包含 as VAR ,那么 EXPR 的返回值被赋值给 VAR

    • 如果后续用到 EXPR 的返回值,则后要跟 as 以将其返回值保存下来

      • with open() as f:
    • 如果后续用不到 EXPR 的返回值,仅仅提供一个运行的上下文环境,则后不必跟 as:
    graph = tf.Graph()
    with graph.as_default():
    x = tf.Variable(5, name='x')
  • 执行 BLOCK 中的表达式。

  • 调用上下文管理器的 __exit()__方法。如果 BLOCK 的执行过程中发生了一个异常导致程序退出,那么异常的 type 、 value 和 traceback (即 sys.exc_info()的返回值 )将作为参数传递给__exit()__方法。否则,将传递三个 None 。

references

Python with 结构的更多相关文章

  1. [Python学习笔记][第八章Python异常处理结构与程序调试]

    1/30 第八章Python异常处理结构与程序调试 异常处理 try-except结构 try: try块 except Exception: except块 try-except-else结构 tr ...

  2. Python程序结构(sys、os)

    一.Python组成结构 Python程序一般由包package.模块moudle.函数function组成.具体关系如下图:

  3. python语句结构(控制语句与pass语句)

    python语句结构(控制语句和pass语句) break-跳出循环:语句可以跳出for和while语句的循环体.如果你从for和while循环中终止,任何对应循环的else语块均终止 continu ...

  4. python语句结构(range函数)

    python语句结构(range函数) range()函数 如果你需要遍历数字序列,可以使用内置range()函数,它会生成序列 也可以通过range()函数指定序列的区间 也可以使用range()函 ...

  5. python语句结构(if判断语句)

    一.python语句结构分类 条件控制语句:if 语句 if....elif语句 if嵌套 循环语句:while语句    for循环 控制语句:break.continue.pass语句 二.pyt ...

  6. Python 项目结构

    Python 项目结构 实验准备 我们的实验项目名为 factorial. 12 $ mkdir factorial$ cd factorial/ 主代码 我们给将要创建的 Python 模块取名为 ...

  7. Python分支结构与流程控制

    Python分支结构与流程控制 分支结构 if 语句 分支结构在任何编程语言中都是至关重要的一环,它最主要的目的是让计算机拥有像人一样的思想,能在不同的情况下做出不同的应对方案,所以if语句不管是在什 ...

  8. Python程序结构

    Python程序结构 分支结构 条件语句: if 判断: .....满足判断条件执行的代码块 else: .....不满足判断条件执行的代码块 if 判断1: .....满足判断条件1执行的代码块 e ...

  9. python分支结构与循环结构

    python分支结构 一.if 单条件形式 # 年轻人的世界都不容易 age > 18 age = int(input("请输入您的年龄:")) # input()函数 模拟 ...

  10. 【Learning Python】【第四章】Python代码结构(一)

    这一章的主旨在于介绍python的代码结构 缩进 在很多的编程语言中,一般{}用于控制代码块,比如以下的一段C代码 if(var <= 10) { printf("....." ...

随机推荐

  1. Learning Notes for HTML/CSS/JS

    @1:内部样式表 & 外部样式表 内部样式表的定义,放在<style></style>中,<style>标签放在<head>中 <html ...

  2. c# 单例模式(Single);单例模式的5种写法

    单例模式(Singleton Pattern): 在平时的开发中,可能会用到单例模式,许多java的笔试题中也会叫笔试者写出单例模式的那几种写法并且分析.那么下面就来轻轻地探讨一下,最简单的设计模式, ...

  3. [转] - 学习ASP.NET比较完整的流程!

    如果你已经有较多的面向对象开发经验,跳过以下这两步:  第一步 掌握一门.NET面向对象语言,C#或VB.NET 我强烈反对在没系统学过一门面向对象(OO)语言的前提下去学ASP.NET. ASP.N ...

  4. SpringBoot编辑代码时不重启服务

    @SpringBootApplication @ComponentScan("com.sicdt") public class SicSignWebApplication { pu ...

  5. 关于pycharm中的requirements.txt文件

    作用:记录所有所依赖的第三方模块,方便迁移到不同的环境中后,防止缺少模块,或因为所依赖的第三方模块版本不同引起不必要的问题 生成命令:pip freeze > requirements.txt ...

  6. Cocos2d-x项目移植到WP8系列之八:CCLabelTTF显示中文不换行

    原文链接: http://www.cnblogs.com/zouzf/p/3985330.html 在wp8平台上,CCLabeTTF显示中文不会自动换行,看了下源码,原来底层的实现是根据text的空 ...

  7. INSPIRED启示录 读书笔记 - 第28章 创业型公司的产品管理

    产品设计方式 第一步:创业初期只设三个职位,产品经理.交互设计师和原型开发人员(职位可以兼任) 第二步:快速展开产品设计(高保真原型),邀请真实的目标用户验证产品原型,迭代修改 第三步:随着迭代的深入 ...

  8. python安装包

    1. python常用包下载地址:http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy numpy包下载地址:https://pypi.python.org ...

  9. linux crontab使用

    1.查看.编辑和删除 cron把命令行保存在crontab(cron table)文件里,这个文件通常在 /etc 目录下. 每个系统用户都可以有自己的crontab(在 /var/spool/cro ...

  10. RabbitMQ自动补偿机制(消费者)及幂等问题

    如果消费者 运行时候 报错了 package com.toov5.msg.SMS; import org.springframework.amqp.rabbit.annotation.RabbitHa ...