今天学习的with语句,with的表达形式如下:据说context必须是上下文管理器,这我就懵比了,啥玩意啊。。。

with语句的表达形式:

with context as var:

   block

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

1、计算 context ,并获取一个上下文管理器。

2、上下文管理器的 __exit()__ 方法被保存起来用于之后的调用。

3、调用上下文管理器的 __enter()__ 方法。

4、如果 with 表达式包含 as VAR ,那么 context 的返回值被赋值给 VAR 。

5、执行 BLOCK 中的表达式。

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

刚开始看上面的我也不是很懂,后面查看了下资料发现with的用法跟“上下文管理”是一起的,然后会调用 __enter()__ 和__exit()__ 方法,简单的来讲呢,举个下面的例子吧,反正要用专业术语说呢我也不知道,请看大众化的一个实例:
  这个是我们之前读写文件的用到的try...except..finally表达形式
try:
filename = 'test.txt'
f = open(filename,'w')
f.write('Hello world ')
finally:
f.close()

  但是这个也有可能最终finally执行出错导致没有执行到文件关闭,而且代码也不够简洁,所以就出来了个with...as的表达,如下:

with open('test.txt') as f:
f.write('Hello world')

就这么简单就表达完了,with的表达里面会自动在异常抛出前将文件关闭。

如果要打开多个项目的话只需要逗号隔开即可,如下面表达:

with A() as a, B() as b:
print()

with暂时讲解这么多,当然还有更深层次的内容以后用到的话再学吧,嘻嘻!

 

零基础学习python_with(34课)的更多相关文章

  1. 零基础学习iOS开发

    零基础学习iOS开发不管你是否涉足过IT领域,只要你对iOS开发感兴趣,都可以阅读此专题. [零基础学习iOS开发][02-C语言]11-函数的声明和定义 摘要: 在上一讲中,简单介绍了函数的定义和使 ...

  2. 零基础学习Python数据分析

    网上虽然有很多Python学习的教程,但是大多是围绕Python网页开发等展开.数据分析所需要的Python技能和网页开发等差别非常大,本人就是浪费了很多时间来看这些博客.书籍.所以就有了本文,希望能 ...

  3. 零基础学习openstack【完整中级篇】及openstack资源汇总

    1.你是如何学习openstack的?2.你对openstack的组件了解多少?3.你认为openstack该如何学习? 一直想写关于openstack的方面的内容,今天终于整理完成.算是完成一桩心事 ...

  4. Android零基础入门第34节:Android中基于监听的事件处理

    原文:Android零基础入门第34节:Android中基于监听的事件处理 上一期我们学习了Android中的事件处理,也详细学习了Android中基于监听的事件处理,同时学会了匿名内部类形式,那么本 ...

  5. 【转】【Salesforce】salesforce 零基础学习(十七)Trigger用法

    看本篇之前可以相应阅读以下Trigger相关文章: 1.https://developer.salesforce.com/page/Trigger_Frameworks_and_Apex_Trigge ...

  6. salesforce 零基础学习(五十二)Trigger使用篇(二)

    第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...

  7. 如何从零基础学习VR

    转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...

  8. HTML5零基础学习Web前端需要知道哪些?

    HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...

  9. CSS零基础学习笔记.

    酸菜记 之 CSS的零基础. 这篇是我自己从零基础学习CSS的笔记加理解总结归纳的,如有不对的地方,请留言指教, 学前了解: CSS中字母是不分大小写的; CSS文件可以使用在各种程序文件中(如:PH ...

随机推荐

  1. Zookeeper权限acl,acl的构成 scheme与id

    一.ACl(accerss control  lists)权限控制 1 针对节点可以设置相关读写权限,目的为了保障数据安全性 2.权限permissions可以指定不同的权限范围以及角色 二.ACL命 ...

  2. 菜鸟如何学习vue

    作为一个前端菜鸟,最近开始接触和学习vue. 以前用到的是bootstrap前端框架. Bootstrap,来自 Twitter,是目前最受欢迎的前端框架. Bootstrap 是基于 HTML.CS ...

  3. 使用 Kafka 在生产环境构建大规模机器学习

    智能实时应用为所有行业带来了革命性变化.机器学习及其分支深度学习正蓬勃发展,因为机器学习让计算机能够在无人指引的情况下挖掘深藏的洞见.这种能力正是多种领域所需要的,如非结构化数据分析.图像识别.语音识 ...

  4. Centos7安装WPS和截图工具shutter

    centos7安装WPS 1..在wps官网上下载rpm安装包 2..rpm包安装命令 yum install xxx[安装包的名字] 注意:执行此项命令需要root权限 3.安装完成后即可使用 Ce ...

  5. eval 日期对象

    js中,eval相当于python中的eval(表达式)和exec(代码)的集合. var d = new Date();    #申明一个新的日期对象,方便之后调用,它的方法getDate();ge ...

  6. Android 如何让EditText不自动获取焦点 (转)

    在项目中,一进入一个页面, EditText默认就会自动获取焦点. 那么如何取消这个默认行为呢? 在网上找了好久,有点 监听软键盘事件,有点 调用 clearFouse()方法,但是测试了都没有! x ...

  7. 使用C#调用PI-SDK进行基于PI的开发

    一.概述 PI-SDK(Plant Information Software Develop Kit)是OSI公司提供的基于面向对象的访问PI数据库的软件开发工具包,它可以对以下数据库进行读写: ²  ...

  8. 使用JavaScript完成文字向上间歇滚动

    使用JavaScript完成文字的间歇滚动 const init = (initData) => { const area = initData.area; // 设置单行滚动的高度: cons ...

  9. bzoj4948: World Final2017 A

    求简单多边形内的最长线段长度 显然存在一组最优解,使其所在直线经过多边形的两个端点,枚举这两个端点,求出直线和多边形的有效交点,从而得出直线有哪些部分在多边形内(含边界). 由于多边形的一些边可能与直 ...

  10. 第一篇Docker博文

    Docker组件 Docker引擎 Docker是一个客户端/服务器(C/S)架构的程序.Docker客户端只需向Docker服务器或叫守护进程发出请求,服务器将完成所有工作并返回结果. Docker ...