Python快速入门 | python中频繁使用到的语句:牛逼的 with 语句
接着上篇,我们继续来说说 Python 中常常会用到的语句。
with
with 语句可以说是 Python 中 “人生苦短,我用 Python” 的代表之一,它可以使得我们在编写代码的时候非常简短,且行之有效。
举一个简单的例子,
本文隐藏内容 登陆 后才可以浏览
ok,以上就是我要跟你说的,with 语句的工作方式,简单点说,enter 方法做一些初始化操作,exit 做一些擦屁股的操作。总结一下就是:
1.通过 with 语句可以得到一个上下文管理器
2.执行对象
3.加载 __enter__ 方法
4.加载 __exit__ 方法
5.执行 __enter__,
6.as 可以得到 enter 的返回值
7.拿到对象执行相关操作
8.执行完了之后调用 __exit__ 方法
9.如果遇到异常,__exit__ 可以获取到异常信息
10.在 __exit__ 中处理异常,返回 True
11.继续执行 with 后面的语句。
那么现在的你,能否写一个 with 语句的例子,加深下自己对它的认识了呢?
帅b,你看看我理解的对不对?
当你想让你的类支持 with 语句时就是要定义好enter和exit方法(你可能问为什么呢?不定义enter和exit即不符合上下文管理协议,不符合上下文管理协议即代表你定义的类不支持with语句的使用),enter() 方法通常是用来初始化资源,比如打开一个文件或者网络连接,然后返回这个初始化后的资源。exit() 方法则是在离开 with 语句块时被调用,负责执行清理工作,如关闭文件或网络连接,并处理 with 语句块中发生的任何异常。as 关键字用于 “接收” 来自 enter() 方法的返回值,并将其赋给一个变量,这个变量在 with 语句块内部是可见并可用的。
而__exit__() 方法的定义要求必须有四个参数:self, exc_type, exc_value, 和 traceback。这些参数有特定的作用,尤其是在处理 with 语句块中的异常时。
self: 这是类实例本身,就像其他实例方法中的 self 一样,它指向当前对象的实例。
exc_type: 这个参数接收异常的类型。如果 with 块中发生了异常,exc_type 会被设置为异常类型;如果没有异常,它会被设置为 None。
exc_value: 这个参数接收异常的值,也就是Exception的实例本身。如果 with 块中有异常发生,那exc_value 将是异常对象的具体实例;如果没有异常,它会是 None。
traceback: 这个参数接收一个 traceback 对象,它包含异常发生点的详细信息(比如调用堆栈)。如果 with 块中没有异常,traceback 同样会是 None。
你理解得非常准确!总结得也很清楚。
是有点吃力,最近也在看小帅b推荐的深入浅出python量化交易,里面函数和类的方法引用的参数,包括写法,真的比较难理解,很抽象。比如这篇里面的“self”,为什么一定要有呢?定义的方法cal(),实际上是不需要参数的,为何python就规定要写上self呢?还有return self,return True也是。希望后面能搞清楚。
打卡!!!帅B好屌!!
。。。。
exit return True 是为了避免报错吗
为什么不直接with Handsomeb() as h,而要单独又写个get_Handsomeb()函数绕一下
self ,type, value, trace
对象,类型,值,trace 是什么? 不知道说的对不对
打卡
看得有些吃力加一
吃力+1
打卡
打卡
学完打卡
如果在__enter__中返回的对象是self,是不是可以理解为h.cal()中的这个h算是实例化对象?
可以这么理解
对“面向对象”的编程思想总是很懵逼啊,“函数”也用得不顺手,期待慢慢能提高
哇 跨度好大,我得消化一下
如果这一篇你看得有点吃力,没关系,就先知道了 with 的写法好了,往后我跟你说明白对象和方法后,你再来看这篇会很容易理解。
吃力Ing
QAQ
确实有些吃力
恩,这篇应该写到进阶阶段的…
请问帅b,后面会不会讲到魔术方法,装饰器,元类这些,最近自动化的课程学完了,基础的架子会搭建了,但是用到项目里面发现总还有可以优化的地方,但是这些涉及到的知识属于测试开发的课程了,暂时不想报班了。。。
必须会讲到啊,在进阶阶段讲。