首页 > 编程语言 >【python笔记】contextlib,自定义with语句

【python笔记】contextlib,自定义with语句

时间:2023-12-02 23:24:41浏览次数:37  
标签:语句 自定义 python contextmanager contextlib test

参考书籍
《深度学习入门——自制框架》[日]斋藤康毅 步骤18.5 使用with语句切换

with语法

python中的with语句,用于自动进行后处理。
如文件读写:

with open('sample.txt', 'w') as f:
  f.write('hello sb!')

这段代码等价于

f = open('sample.txt', 'w')
f.write('hello sb!')
f.close()

可以看到with其实就是帮助程序员自动将打开的文件关闭。

contextlib.contextmanager装饰器

使用contextlib中的contextmanager装饰器,就可以实现自定义的with语句了:

import contextlib 

@contextlib.contextmanager
def test():
	print('start')  # 预处理
	try:
		yield
	finally:
		print('done')  # 后处理

# 简单理解为将with中的代码搬到test()中的yield处,然后执行test()
with test():
	print('process...')

输出:

start
process...
done

标签:语句,自定义,python,contextmanager,contextlib,test
From: https://www.cnblogs.com/code-pigeon/p/17872420.html

相关文章

  • 聪明办法学python chap5循环
    聪明办法学pythonchap5循环for循环:重复执行特定范围的循环,知道已知循环次数可以用forfor_inrange()左闭右开区间range(起始默认为0,终止,步长默认为1)while循环:不知道循环什么时候停下来跳出循环:break:跳出循环continue:跳出本次循环;进入下一次循环......
  • 聪明办法学Python Task06&Task07
    循环LOOPfor循环在知道循环次数的情况下forxinrange(m,n):!!!注意:1.range(m,n)中包含x,不包含y(前闭后开);​ 2.省略第一个参数时,默认起始范围是0;​ 3.当添加第三个参数时:​ 第三个参数代表“步长”​ 如:foriinrange(0,10,2):print(i)输......
  • 第四次python学习笔记
    循环结构:1.while循环:用法:while条件:条件成立重复执行的代码1条件成立重复执行的代码2......示例一:计算1-100累加和分析:1-100的累加和,即1+2+3+4+….,即前两个数字的相加结果+下一个数字(前一个数字+1)。 i=1num =0......
  • python并行之flask-socketio
    1、服务器端fromflaskimport*fromflask_socketioimport*fromflask_socketioimportSocketIOfromnasbench_lib.nasbench_201importNASBench201importrandomimportsubprocessclassServer:def__init__(self,gpu):self.app=Flask(__name__)......
  • python task4
    python(四)循环for循环和循环范围for循环的特点基于提供的范围,重复执行特定次数的操作for_inrange(m,n+1)range(x,y)是左闭右开区间,包含x,不包含y(如果省略第一个参数,range起始范围默认为0)(如果添加第三个参数,第三个参数为“步长”step)或者defsumF......
  • 聪明办法学python task5/6
    循环for语句range()以指定数字开始并指定不同的增量(甚至可以是负数,有时这也叫做'步长')(前闭后开)for...else语句用于在循环结束后执行一段代码如果在循环过程中遇到了break语句,则会中断循环,此时不会执行else子句。while循环用CTRL+C来退出当前的无限循环。......
  • 聪明办法学python第四次打卡
    循环for循环的特点基于提供的范围,重复执行特定次数的操作for循环嵌套#下面的代码将输出二维坐标defprintCoordinates(xMax,yMax):forxinrange(1,xMax+1):foryinrange(1,yMax+1):print(f"({x},{y})",end="")print()printCoordinat......
  • 【JavaSE】异常(异常体系、异常处理方式、自定义异常)
    异常介绍异常体系一定要能阐述异常的体系结构!异常类的祖先类:Throwable所有的异常都是一个类,如果不清楚可以在API帮助文档查询运行时异常:编译时没有错误,运行时可能会出错,通常是代码不严谨导致的编译时异常(不包含语法错误):主要起提醒作用,需要在运行之前给出解决方式异常处理......
  • Python学习 CHAPTER 5循环和CHAPTER 6字符串
    CHAPTER5循环一、FOR循环的特点基于提供的范围,重复执行特定次数的操作#注意:range(x,y)是左闭右开区间,包含x,不包含y 如果我们省略第一个参数会发生什么?for × in range(n+1) #range起始范围默认为0那如果我们添加第三个参数呢? #第三个参数为“步长”step for×in ra......
  • SMTP操作使用详解并通过python进行smtp邮件发送示例
    转载请注明出处:1.SMTP     SMTP 的全称是“SimpleMailTransferProtocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP服......