python with关键字


  这篇文章是我学习python过程中遗漏的知识。以前一直是背代码模板,打开文件用with关键字,但是不知道其中的原理。原来with关键字是用来自动关闭资源的,这一点和java的try-with-resource语法功能是一致的。

关闭资源

  关闭资源最好的例子就是文件资源。如果不使用with关键字那么就要用try和finally了,如以下代码:

# _*_ coding:utf-8 _*_

if __name__ == '__main__':
    f = open('F:\learn\math-algorithm\README.md', 'r')
    try:
        print(f.read())
    finally:
        f.close()

  输出的是这个文件的内容:

#math-algorithm

  如果用with关键字改写就是这样的:

# _*_ coding:utf-8 _*_

if __name__ == '__main__':
    with open('F:\learn\math-algorithm\README.md', 'r') as f:
        print(f.read())

  效果也是一样的:

#math-algorithm

上下文管理器

  就像java的try-with-resource必须要对象实现AutoCloseable接口一样,python的with关键字要生效也必须实现上下文管理器。我打算自己写一个类来试一试。
  先写一个简单的类实现上下文管理器:


class SimpleResource:

    def __enter__(self):
        print('打开资源')

    def __exit__(self, exc_type, exc_val, exc_tb):
        print('关闭资源', exc_type, exc_val, exc_tb)

  然后使用with关键字调用它:

# —*— coding:utf-8 _*_
from com.youngthing.basic.SimpleResource import SimpleResource

if __name__ == '__main__':
    with SimpleResource() as sr:
        pass

  输出结果:

打开资源
关闭资源 None None None
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

醒过来摸鱼

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

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

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

打赏作者

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

抵扣说明:

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

余额充值