运维开发网

你在 Python 中常常写的 with..as.. 到底是个啥?

运维开发网 https://www.qedev.com 2021-03-03 12:34 出处:51CTO 作者:mb5ffd6f0f39006
你在Python中常常写的with..as..到底是个啥?小帅b学习python的正确姿势with语句可以说是Python中“人生苦短,我用Python”的经典代表之一,它可以使得我们在编写代码的时候非常简短,且行之有效。举一个简单的例子,在Java中,你想要读取一个文件中的内容,一般来说需要自己定义一个这样的读取方法:而在Python中,想要读取文件就可以直接这样:这样看起来,是挺短呀。其实文件

你在 Python 中常常写的 with..as.. 到底是个啥?

小帅b 学习python的正确姿势

with 语句可以说是 Python 中 “人生苦短,我用 Python” 的经典代表之一,它可以使得我们在编写代码的时候非常简短,且行之有效。

举一个简单的例子,在 Java 中,你想要读取一个文件中的内容,一般来说需要自己定义一个这样的读取方法:

你在 Python 中常常写的 with..as.. 到底是个啥?

而在 Python 中,想要读取文件就可以直接这样:

你在 Python 中常常写的 with..as.. 到底是个啥?

这样看起来,是挺短呀。

你在 Python 中常常写的 with..as.. 到底是个啥?

其实文件操作中所涉及到的 try...except..finally 都给封装起来了:

你在 Python 中常常写的 with..as.. 到底是个啥?

而我们通过 with 拿了对象就可以直接操作了,是不是有点强大,那么它是怎么做到的呢?

接下来就是:学习 python 的正确姿势

你在 Python 中常常写的 with..as.. 到底是个啥?

with 语句是用于上下文对象的管理,通过它你就可以操作上下文对象:

你在 Python 中常常写的 with..as.. 到底是个啥?

比如上面这个,在 with 调用后得到的 Handsomeb对象里面,需要用到 enter () 和 exit() 这两个方法,也就是说,如果你想要让你创建的对象能被 with 使用,那么你这个对象必须要有 enter () 和 exit() 这两个方法。

这两个方法是干什么用的呢?

当我们使用 with 去执行这个对象的时候,就会先去调用 enter () ,最后再调用 exit() :

你在 Python 中常常写的 with..as.. 到底是个啥?

打印出来是这样的:

你在 Python 中常常写的 with..as.. 到底是个啥?

可以看到,我们使用 with 去调用 get_Handsomeb ,得到的这个对象会先执行“进入 enter 方法”,接着再执行 with 里面的 “get...”,等都执行完毕之后,再去执行 “进入 exit 方法” 。

我们再来看看 with..后面紧跟着的 as 是干嘛的呢?

你在 Python 中常常写的 with..as.. 到底是个啥?

在这里的 as 后面的变量名称,其实得到的就是 enter 方法返回的值。

你在 Python 中常常写的 with..as.. 到底是个啥?

你看,我在 enter 方法中定义返回了 “handsomeb” ,然后使用 “with .. as h” 的方式获取对象, 从打印结果可以看到:这时候 h 得到的就是 enter 方法中的返回值 “handsomeb” 。

可以返回一个对象:

你在 Python 中常常写的 with..as.. 到底是个啥?

接着,我们再来看看我们定义的这个 exit 方法,细心点你会发现,这里携带了这么几个参数:type, value, trace。

它们是干嘛的呢?这就是我们开头所说的问题。

我们在操作一些对象的时候,比如操作文件的时候,可能会发现这样那样未知的异常,比如文件的位置找不到了,文件打不开了等等问题,关于这些异常的信息,我们可以在 exit 方法中得到。

举个例子:

我们将type, value, trace这几个参数都打印出来,然后创建一个计算的方法:

你在 Python 中常常写的 with..as.. 到底是个啥?

不过这个方法执行的是 100/0 ,我们知道 0 是不能作为除数的,这样是会报错的,我们使用 with 来调用下看看:

你在 Python 中常常写的 with..as.. 到底是个啥?

执行结果是这样的:

你在 Python 中常常写的 with..as.. 到底是个啥?

可以看到,这些抛出的异常信息,我们可以在 exit 方法中的参数中直接获取,那么就可以在这里做一些事情(对一些异常进行处理)了,比如说,在文件操作中,我们到最后都需要关闭这个文件流的,但是有了 exit 这个方法, Python 直接在里面做了资源关闭操作,我们就不需要再手动去关闭了。

ok,以上就是今天我给你分享的 with 工作方式,总结一下就是:

1.通过 with 语句可以得到一个上下文管理器

2.执行对象

3.加载 enter 方法

4.加载 exit 方法

5.执行 enter

6.as 可以得到 enter 的返回值

7.拿到对象执行相关操作

8.执行完了之后调用 exit 方法

9.如果遇到异常,exit 可以获取到异常信息

10.在 exit 中处理异常,返回 True

11.继续执行 with 后面的语句。

希望对你有帮助,我们下回见,peace!

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号