python中with的作用_Python的with用法理解

Python的with理解

标签(空格分隔): Python

with做为一种上下文管理器,在Python中的作用可以简单的理解为是用来代替try...except...finally的处理流程。

with通过__enter__方法初始化,然后在__exit__中做善后以及处理异常。对于一些需要预先设置,事后要清理的一些任务,with提供了一种非常方便的表达。在紧跟with后面的语句被求值运算后,会调用运算返回对象的__enter__方法,并将__enter__的返回结果赋值给as后面的变量。当with后面的代码块全部被执行完之后,将调用返回对象的__exit__()方法执行清理工作。

就像在文件操作中:

file = open("file.txt")

try:

data = file.read()

finally:

file.close()

在使用了with...as...后,代码将精简为:

with open("file.txt") as file:

data = file.read()

在上面的代码中,open()函数会返回一个类型为file的对象,该对象具有__enter__与__exit__方法(可以通过dir(file),type(file)查看),之后调用对象的__enter__方法,将返回值赋值给file变量,所以在使用with...as...操作文件时不需要显示的关闭文件。

既然知道with...as...中最重要的就是__enter、__exit__,那我们就可以来自定义一个上下文管理器。

其中:

__enter__方法将在进入代码块前被调用。

__exit__将在离开代码块之后被调用(即使在代码块中遇到了异常)。

class WithDemo:

def __enter__(self):

print "in __enter__"

return "WithDemo"

def __exit__(self, type, value, trace):

print "in __exit__"

def get_demo_with():

return WithDemo()

with get_demo_with() as demo:

print "demo:", demo

执行结果为:

in __enter__

demo:WithDemo

in __exit__

在刚开始的时候就已经说,with..as..可以用来代替try...except...finally...的流程操作,上面都在说try...finally...的情况,那异常呢?如果仔细点会发现__exit__()的参数有三个,这三个参数便是为异常提供处理的参数。

class WithDemo:

def __enter__(self):

return self

def __exit__(self, type, value, trace):

print "type:", type

print "value:", value

print "trace:", trace

def create_trace(self):

return (1/10) + 10

with WithDemo() as demo:

demo.create_trace()

跑一下代码就能发现代码打印出了type, value, trace。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值