python中with的用法
一、文件操作
#自行车
f=open("filename")
f.write()
f.close()
上述代码存在的问题:
(1)直接open()打开需要手动关闭,并且容易忘记关闭
(2)当文件操作出现异常导致程序提早离开,而没有执行关闭文件操作
#小轿车
try:
f=open("xxx")
f.write() #文件操作
except:
do something
finally:
f.close()
虽然功能完善了,但是代码这么冗余,也太笨了吧
#特斯拉
with open("xxx") as f:
f.write() #文件操作
一个with代码块直接解决一切,无论怎样的方式退出代码块都会自动关闭文件
问题来了,
with为什么可以做到自动关闭文件?
with为什么即便文件操作中出现异常也可以正常关闭文件?with语句和原始open同样返回一对象,有什么不一样?
二、with原理
__enter__()方法:紧跟with后面的语句被求值后,返回对象的__enter__()方法被调用,这个方法的返回值将被赋值给as后面的变量。
__exit__()方法:当with后面的代码块全部被执行完之后,将调用前面返回对象的__exit__()方法
class Test(object):
def __enter__(self):
print("执行了 __enter__方法")
return "enter返回的内容"
def __exit__(self, type, value, trace):
print("执行了 __exit__方法")
with Test() as test:
print("test:", test)
运行结果:
执行了 __enter__方法
test: enter返回的内容
执行了 __exit__方法
执行过程:
with后面的Test()语句执行、enter()执行
enter()返回值返回给as后面的变量test
执行with语句中间代码块打印变量test、
中间代码块执行完后执行__exit__()
推断:自动关闭文件是在__exit__()中调用文件关闭方法
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律