私たちの多くは、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 番目の方法は、次のようにデコレータを使用することです。
- contextlib から contextmanager をインポートします。
- 必要な with ステートメントを実装する関数を作成します。
- 関数の上にデコレータ @contextmanager を追加します。
- 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 サイトの他の関連記事を参照してください。

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

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

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

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

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

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

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

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


ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

SublimeText3 Linux 新バージョン
SublimeText3 Linux 最新バージョン

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

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

Dreamweaver Mac版
ビジュアル Web 開発ツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター
