博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python with语句
阅读量:4339 次
发布时间:2019-06-07

本文共 1104 字,大约阅读时间需要 3 分钟。

 

直接把参考的文章放上面吧 :

 

首先with的作用:  

使用with后不管with中的代码出现什么错误,都会进行对当前对象进行清理工作。

例如file的file.close()方法,无论with中出现任何错误,都会执行file.close()方法

 

 

其次with只有特定场合下才能使用。,这个特定场合只的是那些支持了上下文管理器的对象。

这些对象有:

filedecimal.Contextthread.LockTypethreading.Lockthreading.RLockthreading.Conditionthreading.Semaphorethreading.BoundedSemaphore

 

那么什么是上下文管理器:

  这个管理器就是在对象内实现了两个方法:__enter__() 和__exit__()

  __enter__()方法会在with的代码块执行之前执行,__exit__()会在代码块执行结束后执行。

  __exit__()方法内会自带当前对象的清理方法。

 

with语句类似

  try :

  except:

  finally:

的功能:但是with语句更简洁。而且更安全。代码量更少。

 

with 用法:

格式:

with context_expression [as target(s)]:        with-body

 

例子:

with open(r'somefileName') as somefile:        for line in somefile:            print line            # ...more code

 

 

with后面为一个表达式,表达式返回的是一个上下文管理器对象,我的理解就是表达式的返回结果。使用as 可以将这个结果赋值给某个变量。方便之后操作。

一个感觉更牛掰的例子:

nested 函数:

with nested(A(), B(), C()) as (X, Y, Z):         # with-body code here

 

等同于:

with A() as X:    with B() as Y:        with C() as Z:            # with-body code here

 

直接with后面的表达式就是个方法。并且把连着三个函数的方法直接赋值给不同变量。

上下文管理器可以自定义。也可以重写__enter__()和__exit__()方法。

转载于:https://www.cnblogs.com/liangxiaoji/p/11063209.html

你可能感兴趣的文章
java空指针异常
查看>>
【BZOJ】【1520】【POI2006】Szk-Schools
查看>>
16 MySQL--正确使用索引
查看>>
Ubuntu下安装Kafka Manager
查看>>
使用Aspose.Cells的基础知识整理
查看>>
前端知识点回顾之重点篇——ES6的async函数和module
查看>>
UML类图详解_补上相关代码
查看>>
Angularjs中的Controller
查看>>
HDU_1527 取石子游戏(威佐夫博弈)
查看>>
node的“宏任务(macro-task)”和“微任务(micro-task)”机制
查看>>
makefile之VPATH和vpath的使用
查看>>
使用 GCC 在 IBM AIX 上编译程序
查看>>
数码相框各模块时钟流详解
查看>>
XMLHTTPRequest对象的创建与浏览器的兼容问题
查看>>
NSSortDescriptor的使用
查看>>
新手教程:107条Javascript的常用语句
查看>>
NetScaler Best Practice With VMAC In A High Availability Configuration
查看>>
[ python ] 封装
查看>>
Map集合
查看>>
Mybatis中的in查询和foreach标签
查看>>