【python基础】python中的with关键字及其相关用法

目录

1.with关键字 

2.上下文管理器 

3.总结

 4.with torch.no_grad()的用法


在Python中,with是一个关键字,用于处理上下文管理器(context manager)。上下文管理器是一种对象,它定义了在进入和离开某个上下文时应该执行的操作。with 语句使代码更清晰、更具可读性, 它简化了文件流等公共资源的管理。

1.with关键字 

Python 中的 with 语句用于异常处理,封装了 try…except…finally 编码范式,提高了易用性。

菜鸟教程的例子就很生动: 

Python with 关键字 | 菜鸟教程 (runoob.com)

 

2.上下文管理器 

这部分内容参考:【Python】with关键字详解_python with关键字_InceptionZ的博客-CSDN博客

拿文件操作举例,打开文件就相当于上文,操作文件就相当于文中,关闭文件就相当于下文。

上下文管理器:上下文管理器本质就是能够支持with操作的类或对象。任何实现了__ enter __ ()和__ exit __()方法的类对象对可以称之为上下文管理器。上下文管理器对象可以使用with关键字对上下文管理,显然,文件(file对象)也实现了上下文管理协议(上面的两个方法)

自定义上下文管理器:

class MyFile():
	# 1. __init__()  初始化方法
	def __init__(self,file_name,file_mode):
		self.file_name = file_name
		self.file_mode = file_mode
		
	# 2. __enter__() 上文方法
	def __enter__(self):
		print("进入上文")
		self.file = open(self.file_name,self.file_mode)
		return self.file
	
	# 3. __exit__() 下文方法
	def __exit__():
		print("进入下文")
		self.file.close()

# hello.txt为自己定义的文件
# file 并不是MyFile的一个对象,而是上文__enter__函数返回的内容,是一种资源

with MyFile('hello.txt','r') as file:
	file_data = file.read()
	print(file_data)

# result

进入上文
这里是你文件里的内容
进入下文
			

3.总结

with 语句实现原理建立在上下文管理器之上。上下文管理器是一个实现 __enter__ 和 __exit__ 方法的类。使用 with 语句确保在嵌套块的末尾调用 __exit__ 方法。这个概念类似于 try...finally 块的使用。

总结with工作原理:
(1)紧跟with后面的语句被求值后,返回对象的“–enter–()”方法被调用,这个方法的返回值将被赋值给as后面的变量;
(2)当with后面的代码块全部被执行完之后,将调用前面返回对象的“–exit–()”方法。

 如果觉得上面的总结抽象,再看如下实例就能理解了:

 4.with torch.no_grad()的用法

按如下顺序阅读即可:

(1条消息) 【pytorch系列】 with torch.no_grad():用法详解_大黑山修道的博客-CSDN博客

(6条消息) 什么时候该用with torch.no_grad()?什么时候该用.requires_grad ==False?_no_grad grad_zero_Y. F. Zhang的博客-CSDN博客 最后在看一下这个:

pytorch autograd backward函数中 retain_graph参数的作用,简单例子分析,以及create_graph参数的作用 - yangyuwen_yang - 博客园 (cnblogs.com)

 

 

 

  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Top Secret

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值