一段基本的 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

最新文章

  1. [Phalcon] DI默认的服务
  2. php 提示Warning: mysql_fetch_array() expects
  3. ZTE AD3812 3G模块在linux 2.6.34 内核的开发板上的支持方法
  4. Maven模块聚合与继承
  5. 个人对现在大众对perl的偏见的一些见解
  6. HttpClient研究学习总结
  7. PowerDesigner连接MySQL和逆向工程图
  8. React 记录(3)
  9. [C#]关于DataDirectory的一些思考
  10. Mock2 moco框架的http协议get方法Mock的实现
  11. vs 基本验证控件使用
  12. Python自动化开发 - 堡垒机实例
  13. Hessian学习(springboot环境)
  14. pyinstaller打包pyqt文件(转)
  15. 1、pandas使用sort_values排序
  16. 接口自动化(unittest)
  17. Cordova - Windows 下创建第一个 Android App
  18. pandas1
  19. 【UOJ#79】一般图最大匹配(带花树)
  20. Laravel 5.4 migrate时报错: Specified key was too long error

热门文章

  1. django目录下的路由系统和视图函数
  2. Multi-thread & Multi-process
  3. iOS NSSet 学习 “无序数组” & 去重 案例
  4. 一步步讲解如何开源自己的项目到GitHub上,Mac机示例
  5. 【leetcode刷题笔记】Median of Two Sorted Arrays
  6. nodejs 各种插件
  7. web框架详解之三Modal
  8. C++中容器的使用(一)
  9. juniper常用命令(二)
  10. Python面向对象的编程注意细节