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")

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM