首页 > 编程语言 >python中with的用法

python中with的用法

时间:2024-01-30 10:11:06浏览次数:24  
标签:__ 文件 python 用法 exit enter test 执行

一、文件操作

#自行车

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__()中调用文件关闭方法

 

标签:__,文件,python,用法,exit,enter,test,执行
From: https://www.cnblogs.com/Zhouce/p/17996162

相关文章

  • Python中__init__.py的作用
    Pytorch学习笔记-(__init__)_pytorch3.8的init文件-CSDN博客 (推荐)Python:__init__.py的作用-知乎(zhihu.com) (推荐)Python中的__init__.py与模块导入___init__.py导入自定义py-CSDN博客你常常看到的__init__.py到底是个啥?-知乎(zhihu.com) 总结一下Python中__ini......
  • nftables用法介绍
    Kubernetes1.29版本中已经将nftables作为一个featureGates,本文简单整理了nftables的用法,便于后续理解kubernetes的nftables规则。文末给出了使用kubeadm部署启用nftablesfeatureGates的配置文件。如下内容来源nftables的man文档以及wiki。nftables和iptables的不同之处nfta......
  • python第五节:集合set(3)
    集合遍历for循环遍历集合中元素例子1:set1={'a','b','cde','张三','123'} foriinset1:   print(i) 结果:acdeb张三123 enumerate遍历索引和元素例子2:set1={'a','b','cde','张三','123'} forin......
  • Python Seaborn 衍生变量的可视化
    ​ Seaborn是一个基于matplotlib的Python库,用于创建统计图形。衍生变量是指从原始数据中计算得出的新变量。使用Seaborn可视化衍生变量,通过绘制衍生变量的图表,可以更好地理解数据之间的关系,发现数据中的潜在模式,识别异常值。1、创建衍生变量对衍生变量进行可视化是一......
  • python自定义装饰器,实现轮询监控数据库,并且根据字段内容变更打印相应日志或结束循环
    使用方法可以写个whileTrue的循环监控数据,再分别定义每个状态要做什么事情注意:循环中不要写breake不要return,换成yield,把函数作为一个生成器,由装饰器控制循环代码示例importfunctoolsimporttimefromutils.log_settingimportloggerfromconfigimportsetti......
  • Python中的函数用法
    ​ Python中,函数是组织好的、可重用的、用来执行一个特定任务的代码块。函数提高了代码的模块化和代码重用率。函数是一种将代码块组织在一起以便重复使用的工具。函数可以接受输入数据,并返回输出数据。参考文档:Python中的函数用法-CJavaPy1、定义函数使用关键字def来定义......
  • sqlalchemy模块——python的ORM数据库
    介绍ORM数据库,简单理解就是把数据库的表抽象成一个个类,对数据库进行增删改查的时候可以直接通过库中的属性进行访问,即用python抽象数据库,通过sqlalchemy自动转换成数据库sql语句执行,可以更专注于代码的实现,可以配合sqlacodegen直接映射已有的数据库表,实际操作的时候需要借助其他......
  • shelve模块——python内置关系型数据库
    介绍python内置的关系型数据库,key-value的方式进行存储,使用的时候可以像字典一样调用,一般数据需要持久化的时候会用到此数据库,比如测试环境的一些基本不会更改的配置信息,可以使用shelve库存储,后续调用的时候不必每次都从接口拉取使用导入importshelve写入#writeback参数......
  • redis模块——python操作redis
    介绍使用python操作redis库中的缓存,常见操作,测试后清除测试数据缓存,测试前清理缓存保证不被之前的测试数据影响到测试准确性使用安装pipinstallredis导入importredis模糊搜索查找keymsp_fc_rule=self.msp_redis.keys('msp-cache-frequency-limit-info:*')循环遍历k......
  • 安装dmPython
    一、安装dmPython对于达梦数据库,必须首先安装dmPython,才可以使用,在$DM_HOME/drivers目录下有多种类型的驱动:[dmdba@dm8~]$cd/dm/dmdbms/drivers/[dmdba@dm8drivers]$lsdcidotNetdpifldrgojdbclogmnrmsgparseodbcphp_pdopythonr2dbc[dmdba@dm8......