python用于声明类的关键字_python的with关键字
前言
with表达式其实是try-finally的简写形式。但是又不是全相同。
格式
"""
格式
with context [as var]:
pass
"""
其中的context是一个表达式,返回的是一个对象,var用来保存context表达式返回的对象,可以有单个或者多个返回值。
with open('1.txt') as f:
print(f.read())
print(f.closed)
表达式open('1.txt')返回是一个_io.TextIOWrapper 类型的变量用f接受到。在with语句块中就可以使用这个变量操作文件。执行with这个结构之后。f会自动关闭。相当于自带了一个finally。
image.png
但是with本身并没有异常捕获的功能,但是如果发生了运行时异常,它照样可以关闭文件释放资源。
这个例子可以看出with没有捕获异常的功能。
with open('2.txt') as f:
print(f.read())
print(f.closed)
image.png
这个例子可以看出with发生了异常也会关闭程序。
try:
with open('1.txt') as f2:
print(f2.read())
f2.seek(-5,os.SEEK_SET)
except ValueError as e:
print("error")
print(f2.closed)
image.png
原理
"""
with 语句实质是上下文管理。
1、上下文管理协议。包含方法__enter__() 和 __exit__(),支持该协议对象要实现这两个方法。
2、上下文管理器,定义执行with语句时要建立的运行时上下文,负责执行with语句块上下文中的进入与退出操作。
3、进入上下文的时候执行__enter__方法,如果设置as var语句,var变量接受__enter__()方法返回值。
4、如果运行时发生了异常,就退出上下文管理器。调用管理器__exit__方法。
"""
自定义类
自定义类必须包含上述几个方法才能正确使用with关键字。
class Mycontex(object):
def __init__(self,name):
self.name=name
def __enter__(self):
print("进入enter")
return self
def do_self(self):
print(self.name)
def __exit__(self,exc_type,exc_value,traceback):
print("退出exit")
print(exc_type,exc_value)
if __name__ == '__main__':
with Mycontex('test') as mc:
mc.do_self()
image.png
下面我们故意加一个NameError
image.png
即使程序发生了错误,python解释器终止了我们的程序,但是我们的类 还是顺利关闭了。
应用场景
1、文件操作。2、进程线程之间互斥对象。3、支持上下文其他对象
python用于声明类的关键字_python的with关键字相关推荐
- python定义一个类和子类_Python面向对象class类属性及子类用法分析
本文实例讲述了Python面向对象class类属性及子类用法.分享给大家供大家参考,具体如下: class类属性 class Foo(object): x=1.5 foo=Foo() print fo ...
- python什么是类和对象_python的类和对象(1)
类和对象 现在这年头,怎么哪里都有对象?街上看了一路手拉手,回来学习还要看到"对象". 是不是学会了对象,就有对象了? 1.定义: 百度解释: 对象是对客观事物的抽象,类是对对象的 ...
- python用于标识类方法的是_Python类的设计与使用
28 类的基础--设计.使用 上一章说过,类是事物功能和属性的抽象,对象是类的实例化.就像人人都知道小汽车可以干什么什么的,但光想小汽车如何好是没有用的,得开车或坐才能感受到小汽车的好.人脑里的小汽车 ...
- python语言的保留字有哪些_Python保留字(关键字)一览表
与 C.C++.Java.C# 等语言不同,Python 没有定义常量的关键字,意即 Python 中没有常量的概念.为了实现与其他语言中功能相近的常量,可以使用 Python 面向对象的方法编写一个 ...
- python标识符和关键字_Python标识符和关键字资料解析
标识符和关键字都是之中具有某种意义的标记和称谓,就像人的外号一样.所谓的标识符就是代码的分号.单引号.双引号等等就是标识符,而代码中的if.for等等就是关键字. python语言的标识符使用规则和C ...
- python函数和类的区别_Python中类中的方法还有区别?
上一篇,我们讲到Python类中的属性是有区别的,爱思考的小伙伴们可能就会问了,Python中的方法是不是也有区别呢?是的,而且Python中的方法区别更大,让我们来看看吧~ Python类中的三种方 ...
- python模块和类和方法_Python类、模块、包的区别
类 类的概念在许多语言中出现,很容易理解.它将数据和操作进行封装,以便将来的复用. 模块 模块,在Python可理解为对应于一个文件.在创建了一个脚本文件后,定义了某些函数和变量.你在其他需要这些功能 ...
- python里面的类和对象_Python中类和对象在内存中是如何保存?
类以及类中的方法在内存中只有一份,而根据类创建的每一个对象都在内存中需要存一份,大致如下图: 如上图所示,根据类创建对象时,对象中除了封装 name 和 age 的值之外,还会保存一个类对象指针,该值 ...
- python定义一个类和子类_Python定义类、定义子类以及super()函数的使用
代码实验展示: # 继承关系 object -> Person -> Student -> SchoolBoy # python2的语法: # class Person(object ...
最新文章
- 数据科学究竟是什么?
- SQLITE3根据需求查询回不同的数据类型简单记录
- “MIDI机器狗”的木马正在疯狂传播
- CV之CycleGAN:CycleGAN算法相关思路配图、论文集合
- 设计模式(二) 工厂模式
- 简单查找,如果找到返回下标,如果找不到返回-1
- 解密HLS中的AES加密
- Java——多线程(线程安全问题)
- JQuery.autocomplete扩展功能:实现多列自动提示
- 甲骨文推出MySQL Fabric,简化MySQL的高可用性与可扩展性
- homebrew安装
- 平板电脑应用_机房巡检AI机器人是啥,工业平板电脑的应用如何体现
- origin 快捷键
- Unity常用图片格式说明
- 基于决策树算法的银行营销预测
- 三跨考生准备考研复试(机试)之路(日记版)
- 简述华为的鸿蒙操作系统的结构,华为鸿蒙操作系统今日重磅发布
- 什么 是模型的记忆力!
- 小说里的编程 【连载之十二】元宇宙里月亮弯弯
- java斗地主代码_基于java实现斗地主代码实例解析
热门文章
- Python要点总结,我使用了100个小例子!
- ReportViewer教程(15)-矩阵报表-5
- Invoke and BeginInvoke BeginInvoke和EndInvoke方法 (转)2
- 每天进步一点点《PCA的简要学习》
- scikit-learn中随机森林使用详解
- python语句块规范_Python基础语法——代码规范判断语句循环语句
- 浏览器怎么扫描二维码_让你的chrome浏览器开启自动翻译,浏览任何语言不是梦...
- leetcode —— 959. 由斜杠划分区域
- 吴恩达深度学习 —— 4.7 参数 vs. 超参数
- 用simulink分析傅里叶变换、短时傅里叶变换和小波变换