理解とコンテキストマネージャのパイソンを使用して

理解とコンテキストマネージャのパイソンを使用して

コンテキストマネージャとは何ですか?

  • マネージャは、任意のコードブロックラッパーコンテキストオブジェクトです。
  • コンテキストマネージャは、コンテキストマネージャへのアクセス、毎回の実行コードの整合性を確保します。
  • あなたはコンテキストマネージャを終了すると、関連するリソースが適切にリサイクルすることができます。

簡単に言えば、コンテキストマネージャです with 语句

コンテキストマネージャを使用する利点

  • そのようなファイル操作、データベース接続などのリソース、(作成/取得/解放)を、よりエレガントな方法で操作することができます。

  • ファイルを閉じるには行っていない、コードより簡潔を作り、コードを書くことで文と、終了ステップの実施を確保することができる必要があります。

  • これは、例外を処理するために、よりエレガントな方法であってもよいです。

コンテキストマネージャを使用します

そのようなAのコンテキストの経営を実現するには、最初のコンテキスト管理プロトコルを知っている必要があります。

単にクラスにあることを、つけ、このクラスのインスタンスは、コンテキストマネージャです。实现了 enter 和__exit__的方法

# 上下文管理协议
class Sample:
    def __enter__(self):
        print("enter")
        # 获取资源
        return self

    def __exit__(self, exc_type, exc_val, exc_tb):
        # 释放资源
        print("exit")

    def do_something(self):
        print("doing something")


with Sample() as sample:
    sample.do_something()

出力:

enter
doing something
exit

コードを書くときに明確に、この例から見ることができ、または接続__enter__資源に取得することができ、リソースが__exit__でオフに書かれています。

contextlib簡素化コンテキストマネージャ

# 让普通函数也可以使用上下文管理, 前提条件是add函数必须是生成器函数,且只有yield语句
from contextlib import contextmanager


@contextmanager
def add(x, y):
    print('__enter__')  # 第一步:调用__enter__
    yield x + y  # 第二步:返回__enter__函数的返回值给obj对象
    print('__exit__')  # 第四步:调用__exit__


with add(1, 2) as obj:
    print(obj)  # 第三步:执行上下文语句块

出力:

__enter__
3
__exit__

  • contextlib Pythonの標準ライブラリモジュールは、よりユーザーフレンドリーなコンテキスト管理ツールモジュールを提供することです。
  • これは、デコレータによって実現され、クラスおよび使用__enter__と__exit__これら2つのメソッドを作成する必要はありません、それは声明でより便利です。
  • @contextmanagerは、AS ...発電機、変数に割り当てられた値と収率の発生を受けて、通常の文章を用いて行わデコレータデコレータ、発電機です。
  • ()、また@contextmanager後に装飾的なデコレータを閉じる閉じると文で使用(!このオブジェクトはclose()メソッドを呼び出すことができるものとする)は、オブジェクトコンテキストオブジェクトになることができます。

参考:コンテキストマネージャ

公開された29元の記事 ウォン称賛19 ビュー1310

おすすめ

転載: blog.csdn.net/s1156605343/article/details/104736418