1.with语句时用于对try except finally 的优化,让代码更加美观,

例如常用的开发文件的操作,用try except finally 实现:

f=open('file_name','r')
try:r=f.read()
except:pass
finally:f.close()

打开文件的时候,为了能正常释放文件的句柄,都要加个try,然后再finally里把f close掉,但是这样的代码不美观,finally就像个尾巴,一直托在后面,尤其是当try里面的语句时几十行

用with的实现:

with open('file_name','r') as f:r=f.read()

这条语句就好简洁很多,当with里面的语句产生异常的话,也会正常关闭文件

2.除了打开文件,with语句还可以用于哪些地方呢?

with只适用于上下文管理器的调用,除了文件外,with还支持 threading、decimal等模块,当然我们也可以自己定义可以给with调用的上下文管理器

2.1使用类定义上下文管理器

class A():def __enter__(self):self.a=1return selfdef f(self):print 'f'def __exit__(self,a,b,c):print 'exit'
def func():return A()with A() as a:1/0a.f()print a.a

使用类定义上下文管理器需要在类上定义__enter__和__exit__方法,执行with A() as a: 语句时会先执行__enter__方法,这个方法的返回值会赋值给后面的a变量,当with里面的语句产生异常或正常执行完时,都好调用类中的__exit__方法。

2.2使用生成器定义上下文管理器

from contextlib import contextmanager@contextmanager
def demo():print '这里的代码相当于__enter__里面的代码'yield 'i ma value'print '这里的代码相当于__exit__里面的代码'with demo() as value:print  value

2.3 自定义支持 closing 的对象

class closing(object):def __init__(self, thing):self.thing = thingdef __enter__(self):return self.thingdef __exit__(self, *exc_info):self.thing.close()class A():def __init__(self):self.thing=open('file_name','w')def f(self):print '运行函数'def close(self):self.thing.close()with closing(A()) as a:a.f()

转载于:https://www.cnblogs.com/lnn123/p/10481297.html

python with关键字学习相关推荐

  1. Python零基础入门(一)——Python基础关键字和语法[学习笔记]

    Python零基础入门(一)--Python基础关键字和语法 目录 1. Hello World! 2. 字符串操作 3. 简单数学计算 4. if elif else 5. 循环 基础类型 pyth ...

  2. python监控错误语句,基于Python的关键字监控及告警

    基于Python的关键字监控及告警 来源:中文源码网    浏览: 次    日期:2018年9月2日 [下载文档:  基于Python的关键字监控及告警.txt ] (友情提示:右键点上行txt文档 ...

  3. 附pdf下载 | 入门Python和深度学习的经典书

    当下Python和深度学习为代表的人工智能AI技术非常火热,正深刻影响着人类社会的方方面面.今天分享推荐三本入门Python和深度学习的电子书: python电子书教程 PyTorch电子书教程 神经 ...

  4. python基础入门学习笔记 (2)

    python基础入门学习笔记 2021年2月8日 1 编译器和解释器的区别 编译器/解释器:高级语言与机器之间的翻译官 2 值传递: print "a = ",a print &q ...

  5. Python精简入门学习(四)

    Python精简入门学习之流程控制(下) -循环的分类 -while循环 -for 循环 -break 和 continue -break的使用 -continue的使用 python福利教程领取方式 ...

  6. Python精简入门学习(三)

    Python精简入门学习之流程控制(上) -流程控制 -While循环: 适用于对未知的循环次数 用于判断 -for使用: 适用于已知的循环次数[可迭代对象遍历] -单分支 -双分支 -多分支 [外链 ...

  7. Python精简入门级学习(二)

    ### Python 精简入门级学习之数据类型 -变量 *变量是什么? +可以将变量比作为一个存放东西的盒子,里面存放的东西取决于你想放如什么,当你放如苹果的时候它装的就是苹果,你往里面放的是梨子它装 ...

  8. Python 精简入门级学习(一)

    ### Python 精简入门级学习 一.简介 -Python的发展历程 -Python的优点 -Python的缺点 -Python应用领域 -Python的安装 -第一个python(注意代码的标点 ...

  9. python基础知识学习笔记(2)

    python基础知识学习笔记(2) 整理一下python基础知识,以防忘记 文章目录 python基础知识学习笔记(2) python简洁的一行代码 python简洁的一行代码 1.交换两个变量 # ...

最新文章

  1. 是什么动词_动词后面跟什么词?答案笑喷...
  2. nvcc fatal : A single input file is required for a non-link phase when an outputfile is specified
  3. redis的两种持久化方式详解
  4. AD9910高速集成DDS芯片(芯片阅读笔记-串行模式篇-22个寄存器SPI通信周期控制)
  5. Linux 进程管理与监控(supervisor and monit)
  6. php与nginx整合
  7. Mac查看本机ip地址
  8. JavaScript:语言精粹
  9. Python实现微信自动抠图换底助手
  10. 搭建最简单的Drool框架
  11. sublime开发apicloud项更新apploader解决
  12. python手机版做小游戏代码大全-12岁的少年教你用Python做小游戏
  13. c语言中计数器(定时器)程序
  14. 【办公技巧】Excel技巧 点击单元格打对勾(宏)
  15. 这四个想法试图搞定整个互联网的安全
  16. Android DeviceOwner 应用的能力
  17. (译)对词向量化的直观理解:从计数向量到Word2Vec
  18. 【Rust日报】2022-09-11 Shuttle 创建和部署带有ShuttleSerenity的 Discord 机器人!
  19. 【组合数学】二项式定理与组合恒等式 ( 二项式定理 | 三个组合恒等式 递推式 | 递推式 1 | 递推式 2 | 递推式 3 帕斯卡/杨辉三角公式 | 组合分析方法 | 递推式组合恒等式特点 )
  20. 基础: 有效值、RMS、振幅、幅度概念

热门文章

  1. Java 8 - Stream流骚操作解读
  2. wordpressPHP实现ajax评论,AJAX_wordpress 为主题添加AJAX提交评论功能的php代码,首先需要在主题的function.php文 - phpStudy...
  3. android 验证输入,最佳实践:输入验证(Android)
  4. mysql my.ini utf8_修改了my.ini没有效果,MySql的字符集还是没有变成utf8——mysql中文乱码...
  5. 数据结构与算法笔记(十一)—— 归并排序
  6. 学习Git_12.10
  7. 回文串判定_JAVA
  8. 面试题总结14 动态规划
  9. 《STL源码剖析》学习-- 1.9-- 可能令你困惑的C++语法1
  10. 链表划分为左小、中相等、右大