Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
学ぶ ネストされたおよび複数のコンテキストマネージャー | Advanced File Handling & Context Managers
Python構造化プログラミング

ネストされたおよび複数のコンテキストマネージャー

メニューを表示するにはスワイプしてください

Pythonで複数のリソース(例えば複数のファイルを同時に開く場合など)を扱う際には、各リソースが適切に取得・解放されることを保証する必要があります。ここで、ネストされたコンテキストマネージャと複数のコンテキストマネージャの利用が特に有効になります。上の動画では、withステートメントのネストと1行で複数のコンテキストマネージャを使用する2つのアプローチを示しています。

withステートメントをネストするとは、1つのwithブロックを別のwithブロックの内部に配置することを指します。これは、あるリソースの使用が別のリソースに依存している場合に役立ちます。例えば、1つのファイルから読み込み、別のファイルに書き込む際に、両方のファイルが正しく管理されるようにすることができます:

with open('input.txt', 'r') as infile:
    with open('output.txt', 'w') as outfile:
        for line in infile:
            outfile.write(line.upper())

しかし、Pythonでは1つのwithステートメントで両方のファイルをカンマ区切りで同時に開くこともできます。この方法はコードをより簡潔にし、各リソースが取得された逆順で解放されることを保証します。つまり、最後に開いたリソースがブロック終了時に最初に閉じられます。

# Open two files simultaneously using a single 'with' statement
with open('input.txt', 'r') as infile, open('output.txt', 'w') as outfile:
    for line in infile:
        outfile.write(line.lower())
# When the block ends, outfile is closed first, then infile

1行で複数のコンテキストマネージャを使用する方法は単なる構文上の糖衣ではなく、複数のリソースを安全に管理する堅牢な手段です。特にファイル、ネットワーク接続、ロックなど、常に正しく解放しなければならないリソースを扱う際に重要です。

Note
さらに学ぶ
question mark

複数のコンテキストマネージャを1つのwith文で使用した場合、リソースが解放される順序について正しく説明しているものはどれですか?

正しい答えを選んでください

すべて明確でしたか?

どのように改善できますか?

フィードバックありがとうございます!

セクション 2.  6

AIに質問する

expand

AIに質問する

ChatGPT

何でも質問するか、提案された質問の1つを試してチャットを始めてください

セクション 2.  6
some-alt