検索
ホームページバックエンド開発Python チュートリアルPython の with キーワードをわかりやすく理解する

Python の with キーワードをわかりやすく理解する

私たちの多くは、Python コードで次のコード スニペットを何度も見たことがあります:

with open('Hi.text', 'w') as f:
f.write("Hello, there")

しかし、私たちの中には、何が必要なのか、なぜ必要なのかがわからない人もいます。ここでそれを使用します。この本を読めば、解決できるほぼすべての問題がわかります。はじめましょう!

まず、with キーワードを使用せずに何をする必要があるかを考えてみましょう。この場合、最初にファイルを開いて書き込みを試みる必要があります。成功か失敗かに関係なく、最後に閉じた方がよいので、コードは次のようになります。

f = open('Hi.text', 'w')
try:
f.write('Hello, there')
finally:
f.close()

それでは、 with キーワードは何に使われるのでしょうか?これは、try..finally コードを 1 つの with... ステートメントに短縮するのに役立ちます。 with文の使い方はこんな感じです。

それで、それは正確には何ですか?実際、with ステートメント自体は Python では特別なものではなく、Python のコンテキスト マネージャーの単なる機能です。 Python の公式ドキュメントから引用されているコンテキスト マネージャーは、必要なときに正確にリソースを割り当てたり解放したりできるようにする方法です。簡単に言うと、あるリソースに対して何かを行うときにコード スニペットを短くします。つまり、使用方法を定義できるということです。 with ステートメントを自分で作成してください。

どうやってこれを行うのでしょうか?それは簡単です。2 つのマジック関数を実装する必要があるだけです。1 つは __enter__ と呼ばれ、もう 1 つは __exit__ と呼ばれます。 1 つ目の方法は、以下に示すように、これら 2 つの関数を実装するクラスを作成することです。

class My_file:
def __init__(self, fname):
self.fname = fname
def __enter__(self):
self.file = open(self.fname, 'w')
return self.file
def __exit__(self, exc_type, exc_val, exc_trace_back):
if self.file:
self.file.close()

ここでは、2 つのマジック関数を実装する通常の Python クラスを作成しました。これら 2 つの関数のシグネチャに注意してください。 __enter__ は self のみを受け入れますが、 __exit__ はさらに多くの引数を受け入れます。例の 3 つは標準形式です。

with My_file('hello.txt') as f:
f.write('hello, world!')

ここの with ステートメントは、最初に __init__ を呼び出して新しいオブジェクトを構築し、次に __enter__ メソッドを呼び出します。最後に、コード ブロックの前に __exit__ メソッドをトリガーします。完成されました。したがって、上記のコードの大まかな同等物は次のとおりです。

myfile = My_file('hello.txt')
f = myfile.__enter__()
f.write('hello, world!')
myfile.__exit(...)

コンテキスト マネージャーを実装する 2 番目の方法は、次のようにデコレータを使用することです。

  1. contextlib から contextmanager をインポートします。
  2. 必要な with ステートメントを実装する関数を作成します。
  3. 関数の上にデコレータ @contextmanager を追加します。
  4. your を your_function と一緒に使用してください!

上記の紹介に従って、デコレータ コンテキスト マネージャーを作成しましょう。

from contextlib import contextmanager
@contextmanager
def my_file_open(fname):
try:
f = open(fname, 'w')
yield f
finally:
print('Closing file')
f.close()
with file_open('hi.txt') as f:
f.write('hello world')

上記では、with ステートメントとコンテキスト マネージャーの基本をほぼすべてカバーしていますが、さらに詳しく知りたい場合は、続けてください...!

contextlib には、使用できる便利なツールがいくつかあります。最初のものは閉じています。閉じると、基本的にコードのブロックが、終了する前に実装する別の関数でラップされます。

@contextmanager
def closing(f):
try:
f.write("Finish writing")
finally:
f.close()
with closing(open("hi.text")):
f.write("hello world")

たとえば、上記のコードでは、close(your_way_of_getting_resource) を直接呼び出すことができ、以下に記述するコード ブロックが完了する前 (f.write("hello world")) に、上で定義した try ..finally ブロックを実行します。

もう 1 つは抑制ツールを使用することです。多くの場合、リソースを取得しようとすると、ファイルを開くときに FileNotFoundException などのエラーが発生する可能性が高いことがわかっています。場合によっては、プログラムが正常に実行し続けることができるように、エラーを検出したり、エラーを抑制したりする必要があります。抑制は、警告を抑制できる 1 つの方法です。必要なのは、抑制したい例外を特定し、suppress(your_choice_of_Exception) を記述することだけです。そうすれば、Python がそこから処理します。

他の場合には、with ブロックに入るときに特定のアクションのみを実行したい場合があります。この場合、nullcontext が便利です。 nullcontext は __enter__ 関数で定義したものを返すだけで、他には何も行いません。リソースにアクセスするために Python で非同期操作を処理している場合、この状況を処理するためのユーティリティが aclosure です。

概要

この記事では、with ステートメントの基本的な概念と使用法、およびその基礎となる動作原理を紹介します。他にも興味深いものがたくさんあります。Python の contextlib ドキュメントをチェックしてください。最後に、いつものように楽しく学習し、楽しくコーディングできることをお祈りしています。

以上がPython の with キーワードをわかりやすく理解するの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明
この記事は51CTO.COMで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。
Pythonと時間:勉強時間を最大限に活用するPythonと時間:勉強時間を最大限に活用するApr 14, 2025 am 12:02 AM

限られた時間でPythonの学習効率を最大化するには、PythonのDateTime、時間、およびスケジュールモジュールを使用できます。 1. DateTimeモジュールは、学習時間を記録および計画するために使用されます。 2。時間モジュールは、勉強と休息の時間を設定するのに役立ちます。 3.スケジュールモジュールは、毎週の学習タスクを自動的に配置します。

Python:ゲーム、GUIなどPython:ゲーム、GUIなどApr 13, 2025 am 12:14 AM

PythonはゲームとGUI開発に優れています。 1)ゲーム開発は、2Dゲームの作成に適した図面、オーディオ、その他の機能を提供し、Pygameを使用します。 2)GUI開発は、TKINTERまたはPYQTを選択できます。 TKINTERはシンプルで使いやすく、PYQTは豊富な機能を備えており、専門能力開発に適しています。

Python vs. C:比較されたアプリケーションとユースケースPython vs. C:比較されたアプリケーションとユースケースApr 12, 2025 am 12:01 AM

Pythonは、データサイエンス、Web開発、自動化タスクに適していますが、Cはシステムプログラミング、ゲーム開発、組み込みシステムに適しています。 Pythonは、そのシンプルさと強力なエコシステムで知られていますが、Cは高性能および基礎となる制御機能で知られています。

2時間のPython計画:現実的なアプローチ2時間のPython計画:現実的なアプローチApr 11, 2025 am 12:04 AM

2時間以内にPythonの基本的なプログラミングの概念とスキルを学ぶことができます。 1.変数とデータ型、2。マスターコントロールフロー(条件付きステートメントとループ)、3。機能の定義と使用を理解する4。

Python:主要なアプリケーションの調査Python:主要なアプリケーションの調査Apr 10, 2025 am 09:41 AM

Pythonは、Web開発、データサイエンス、機械学習、自動化、スクリプトの分野で広く使用されています。 1)Web開発では、DjangoおよびFlask Frameworksが開発プロセスを簡素化します。 2)データサイエンスと機械学習の分野では、Numpy、Pandas、Scikit-Learn、Tensorflowライブラリが強力なサポートを提供します。 3)自動化とスクリプトの観点から、Pythonは自動テストやシステム管理などのタスクに適しています。

2時間でどのくらいのPythonを学ぶことができますか?2時間でどのくらいのPythonを学ぶことができますか?Apr 09, 2025 pm 04:33 PM

2時間以内にPythonの基本を学ぶことができます。 1。変数とデータ型を学習します。2。ステートメントやループの場合などのマスター制御構造、3。関数の定義と使用を理解します。これらは、簡単なPythonプログラムの作成を開始するのに役立ちます。

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は?Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?中間の読書にどこでもfiddlerを使用するときにブラウザによって検出されないようにするにはどうすればよいですか?Apr 02, 2025 am 07:15 AM

fiddlereveryversings for the-middleの測定値を使用するときに検出されないようにする方法

See all articles

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

Eclipse を SAP NetWeaver アプリケーション サーバーと統合します。

VSCode Windows 64 ビットのダウンロード

VSCode Windows 64 ビットのダウンロード

Microsoft によって発売された無料で強力な IDE エディター

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード

AtomエディタMac版ダウンロード

最も人気のあるオープンソースエディター