Python中with...as...的使用方法
作者:折腾一哥 发布时间:2021-10-01 16:58:07
简介:
with
是从Python2.5
引入的一个新的语法,它是一种上下文管理协议,目的在于从流程图中把 try,except 和finally 关键字和资源分配释放相关代码统统去掉,简化try….except….finlally
的处理流程with
通过__enter__
方法初始化,然后在__exit__
中做善后以及处理异常。所以使用with
处理的对象必须有__enter__()
和__exit__()
这两个方法。with
语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源,比如文件使用后自动关闭、线程中锁的自动获取和释放等。
举例如下:
# 打开1.txt文件,并打印输出文件内容
with open('1.txt', 'r', encoding="utf-8") as f:
print(f.read())
看这段代码是不是似曾相识呢?是就对了!
一、With...as语句的基本语法格式:
with expression [as target]:
with_body
参数说明:
expression:
是一个需要执行的表达式;target:
是一个变量或者元组,存储的是expression
表达式执行返回的结果,[]表示该参数为可选参数。
二、With...as语法的执行流程
首先运行
expression
表达式,如果表达式含有计算、类初始化等内容,会优先执行。运行
__enter()__
方法中的代码运行
with_body
中的代码运行
__exit()__
方法中的代码进行善后,比如释放资源,处理错误等。
三、实例验证
#!/usr/bin/python3
# -*- coding: utf-8 -*-
""" with...as...语法测试 """
__author__ = "River.Yang"
__date__ = "2021/9/5"
__version__ = "1.1.0"
class testclass(object):
def test(self):
print("test123")
print("")
class testwith(object):
def __init__(self):
print("创建testwith类")
print("")
def __enter__(self):
print("进入with...as..前")
print("创建testclass实体")
print("")
tt = testclass()
return tt
def __exit__(self, exc_type, exc_val, exc_tb):
print("退出with...as...")
print("释放testclass资源")
print("")
if __name__ == '__main__':
with testwith() as t:
print("with...as...程序内容")
print("with_body")
t.test()
四、程序运行结果
创建testwith类
进入with...as..前
创建testclass实体
with...as...程序内容
with_body
test123
退出with...as...
释放testclass资源
五、代码解析
这段代码一共创建了2个类,第一个testclass
类是功能类,用于存放定义我们需要的所有功能比如这里的test()方法。testwith
类是我们用来测试with...as...
语法的类,用来给testclass
类进行善后(释放资源等)。
程序执行流程:
来源:https://www.cnblogs.com/ChuanYangRiver/p/15308236.html
猜你喜欢
- 和数据库打交道要频繁地用到SQL语句,除非你是全部用控件绑定的方式,但采用控件绑定的方式存在着灵活性差、效率低、功能弱等等缺点。因此,大多数
- 1.线性与非线性回归线性回归 Linear Regression:两个变量之间的关系是一次函数关系的—&mdas
- <?php session_start(); $_SESSION['username']="zhuzhao&
- 引言从他人的错误中学习,通过本指南避免常见陷阱和坏习惯,提高你的 Go 编程技巧在 Go 语言中,就像在任何编程语言中一样,了解常见陷阱和坏
- 下列代码都是以自己的项目实例讲述的,相关的文本内容很少,主要说明全在代码注释中自制图形验证码这里所说的图形验证码都是自制的图形,通过画布、画
- 背景随着Web技术的发展和移动互联网的发展,Hybrid技术已经成为一种前端开发的主流技术方案。那什么是Hybrid App呢?Hybrid
- 主要就是通过jieba的posseg模块将一段文字分段并赋予不同字段不同意思。然后通过频率计算出热频词数据放在文章里面了,就不用花积分下载了
- 1.字符串的字符转换1.1.字符转换的概念在前面说的的字符串替换,是将字符串中的一个子串替换成了新的子串,如果我们想对字符串中的某些字符进行
- PDO::quotePDO::quote — 为SQL语句中的字符串添加引号。(PHP 5 >= 5.1.0, PECL pdo &g
- keras 中fit(self, x=None, y=None, batch_size=None, epochs=1, verbose=1,
- 本文实例讲述了es6函数之严格模式用法。分享给大家供大家参考,具体如下:从es5开始,函数内部可以设定为严格模式。function doSo
- 在使用AJAX开发网站时,经常有朋友遇到乱码的问题,而且一下子难以找到解决方法。其实解决AJAX中文乱码问题很简单。1、服务端程序:<
- PHP的isset()函数 一般用来检测变量是否设置 格式:bool isset ( mixed var [, mixed var [, .
- import timenow_time = time.time()print(now_time)结果是1594
- PHP simplexml_load_string() 函数实例转换形式良好的 XML 字符串为 SimpleXMLElement 对象,然
- detectres.asp<HTML><head><TITLE>asp教程之全能屏幕分辨率侦测</
- 主键表的主键(primary key,主关键字)是表中的一个或多个字段,它的值用于惟一地标识表中的某一条记录。一个表不能有多个主关键字,并且
- 1、算术运算符:+、-、*、/、%。2、递增/递减运算符:如$a++,$a--,++$a,--$a.如:<?php$a=10;$b=5
- 系列目录:1. 服务器XMLHTTP(Server XMLHTTP in ASP)基础2. 
- 前言昨天团队的学妹来问关于POP3协议的问题,所以今天稍稍研究了下POP3协议的格式和Python里面的poplib。而POP服务器往回传的