Python の with ステートメント
Python は、既存のコードを改善するためのさまざまな機能とオプションを提供します。 そのような機能の 1つが with
キーワードです。
このチュートリアルでは、with
ステートメントの機能と Python でのそのアプリケーションについて説明します。
Python で with
ステートメントを使用する
このステートメントは基本的に、例外を処理し、リソースが使用されたときにそれらをクリアするために使用されます。 これにより、コードが適切に実行され、リソースが後でクリーンアップされることが保証されます。
ほとんどの場合、ファイル処理で with
ステートメントが使用されます。 例を挙げてみましょう。
f = open("path\file.txt", "w")
f.write("Sample Content")
f.close()
上記の例では、open()
関数を使用してファイルを開き、write()
メソッドを使用していくつかのコンテンツを書き込みました。 次に、close()
関数がファイル オブジェクトを閉じ、リソースをクリアしました。
上記のコードが with
キーワードでどのように見えるか見てみましょう。
with open("path\file.txt") as f:
f.write("Sample Content")
コードでは、with
ステートメントを使用して、close()
関数の使用をなくすことができたことがわかります。
with
ステートメントが役立つもう 1つの例は、try
および finally
ブロックをカプセル化する場合です。
例えば、
f = open("path\file.txt", "w")
try:
f.write("Sample Content")
finally:
f.close()
try
ブロックはファイルを開くようなコードを受け取り、try
ブロックのコードが例外を発生させるかどうかにかかわらず、finally
ブロックのコードが実行されます。 上記の例では、write()
関数が例外を発生させたとしても、finally
ブロック内のコードが実行され、close()
関数が実行されます。
前の例で with
ステートメントを使用してこれを実現する方法を見てきました。
with
ステートメントをユーザー定義オブジェクトと共に使用することもできます。そのようなオブジェクトはコンテキスト マネージャーとして知られています。 __enter__
と __exit__
メソッドが定義されています。
with
ステートメントを使用してこのクラスのオブジェクトを作成しながら、__enter__
メソッドが実行されます。 with
ブロック内のコードが終了すると、__exit__
メソッドが実行されます。
class writer_class(object):
def __init__(self, filename):
self.filename = filename
def __enter__(self):
self.f = open(self.filename, "w")
return self.f
def __exit__(self, exception, value):
self.f.close()
with writer_class("file.txt") as f:
f.write("DelftStack")
Python の上記のクラスのオブジェクトは、作成時に __enter__
メソッドを実行します。このメソッドは、ファイルを開くために使用されます。 close()
関数は __exit__
メソッド内に配置され、コードが実行されたときにファイル オブジェクトを閉じます。
クラスと同様に、contextlib
ライブラリを使用してコンテキスト マネージャー メソッドを作成できます。 これらのメソッドは、定義された関数の前に置かれる @contextmanager
デコレーターを使用して作成できます。
例えば、
from contextlib import contextmanager
@contextmanager
def new_open(file):
try:
f = open(file, "w")
yield f
finally:
f.close()
with new_open("sample.txt") as f:
f.write("DelftStack")
コード例では、そのようなメソッドを作成できる @contextmanager
デコレータの使用を見ることができます。 定義された関数では、ファイル オブジェクトを作成し、作成されたオブジェクトを try
および finally
ブロックを使用して閉じるための完全なコードを配置します。
まとめ
結論として、Python の with
ステートメントとその使用について説明しました。 最初に、このステートメントの基本と、リソースをクリーンアップすることでコードの読みやすさと効率を向上させる方法について説明しました。
その使用方法を示すために、ファイル処理を伴う最も一般的なアプリケーションに焦点を当てました。 また、コンテキスト マネージャーとそのメソッド、およびそれらで with
ステートメントを使用する方法についても説明しました。
Manav is a IT Professional who has a lot of experience as a core developer in many live projects. He is an avid learner who enjoys learning new things and sharing his findings whenever possible.
LinkedIn