zoukankan      html  css  js  c++  java
  • python中实现上下文管理器的两种方法

    上下文管理器:

        python中实现了__enter__和__exit__方法的对象就可以称之为上下文管理器

    实现方法一举例:

      def File(object):

        def __init__(self, file_name, file_model):

          self.file_name = file_name

          self.file_model = file_model

        def __enter__(self):

          self.f =  open(self.file_name, self.model) 

          return self.f

        def __exit(self):

          self.f.close()

    以下就实现了简单的上下文管理器

    使用方法:

      with File("1.tex", "r") as f:

        f.write("hello world")

    以下代码实现起来更加简洁明了, 不用再调用close()关闭文件

    实现方法二举例:

      Python 还提供了一个 contextmanager 的装饰器,更进一步简化了上下文管理器的实现方式。通过 yield 将函数分割成两部分,yield 之前的语句在 __enter__ 方法中执行,yield 之后的语句在 __exit__ 方法中执行。紧跟在 yield 后面的值是函数的返回值。

       from contextlib import contextmanager

      @contextmanager

      def file (file_name, file_model):

        f = open(file_name, file_model)

        yield f

        f.close()

    以上也实现了上下文管理器,使用方法和以上的类似

      with file("2.tex") as f:

        f.write("hello world")

     
  • 相关阅读:
    Linux基础知识[1]【ACL权限】
    docker 入门学习篇【基本命令与操作】
    centos7.1下 Docker环境搭建
    RHEL6.5下更新python至2.7版本
    Github初学者探索
    vmware下linux虚拟机传文件解决方案之 xftp
    mysql 常用操作命令
    常用DNS记录
    常见网络协议端口号整理
    DNS原理及其解析过程 精彩剖析
  • 原文地址:https://www.cnblogs.com/skaarl/p/9671945.html
Copyright © 2011-2022 走看看