• Skip to main content
  • Skip to secondary menu
  • Skip to primary sidebar
  • Skip to footer

AI活用エンジニアへの道

生成AI時代のエンジニアの生き方を考えるメディア(作成途中)

  • コラム
  • 生成AI
  • プログラミング
    • Python入門
    • Flask入門
    • Django入門
  • プロフィール
Home / プログラミング / Python / Pythonでのwithの使い方について詳細

Pythonでのwithの使い方について詳細

1 withの基本
2 クラスを定義してwithで用いる
3 withを利用する場面
4 関連記事

withの基本

ここでは、pythonのwithの基本的な使い方について記載する。
withは以下のように記述する。

with クラス as a:
   処理

 

withはファイル入出力などの際によく用いられる。
withを利用する場合と利用しない場合で以下のような違いがある。

  • withを利用しない場合
file = open('sample.txt', mode='w') # ファイルを開く処理
file.write('Hello') # ファイルに書き込む処理
file.close() # ファイルを閉じる処理
  • withを利用する場合
with open('sample.txt', mode='w') as file:
    file.write('Hello') # ファイルを開き、書き込み、閉じる一連の処理を行う

withを利用してファイルの入出力をしたら、ファイルを閉じる(close)する処理が自動的に実行される。
ファイルを閉じる処理を忘れると、メモリが解放されずリソースを逼迫して問題が生じることがある。

クラスを定義してwithで用いる

withは自身で定義したクラスで利用することもでき、with クラス名() as 変数名と記述する。
withで利用するクラスには、__enter__と__exit__の2つの特殊メソッドを定義する。

この時、withの後にインデントして記述した処理を実行する前に、指定したクラスの__enter__を呼び出しその返り値がasで指定した変数に格納される、処理終了後に、クラスの__exit__が呼ばれる

  • withの実行例
class FileWriter(object):
    def __init__(self, file_name): # コンストラクタ
        self.file_name = file_name

    def __enter__(self): # with開始前に呼び出される
        self.file = open(self.file_name, 'w')
        return self.file # 返り値がwithの変数に格納される

    def __exit__(self):
        self.file.close() # with終了に呼び出される
with FileWriter('test.txt') as file_writer:
    file_writer.write('hello world')
  # withでクラスを作成すると、まず__init__を実行、次に__enter__を実行、処理終了後に、__exit__を実行する
  # file_writerには__enter__の返り値が格納される

withを利用する場面

withをどのように利用するかというと、連続した一連の処理を実行したい場合、
例えば

  • ファイルの書き込み処理(ファイル開く→書き込む→ファイル閉じる)
  • DBへのデータの書き込み処理(DBへコネクションを張る→書き込む→コネクションを閉じる)

などがある。

この場合、ファイルを閉じ忘れ、コネクションの閉じ忘れがあるとメモリが解放されずリソースを浪費することになる。

そのため、ファイル入出力、DBへの書き込み専用のクラスを別に定義して、

  • ファイル入出力、DBへの書き込みはwithで利用
  • ファイルを開く、DBへコネクションを張る処理を__enter__に定義
  • ファイル書き込み、DBへの書き込みは、withの中の処理で記述
  • ファイルを閉じる、コネクションを閉じる処理を__exit__に定義

などの使い方をする

このようにすると、ファイル入出力、DBへの書き込みが便利に行えるようになる

ちなみにファイルへの出力は一般的に以下のように記述する

Python講座Pythonについてもっと知りたい!というかたはこちら、Pythonの基本文法から標準ライブラリ、応用ライブラリまで収録!!
【2020年版】: Python 3.8 データ構造、文法、アルゴリズム、オブジェクト指向、ライブラリ、完全マスター講座

関連記事

Pythonの型ヒント:コレクション型とOptional型の使い方
Pythonの型ヒント:コレクション型とOptional型の…
Python型ヒントについて、変数と関数の引数と戻り値に付与する基本的な書き方について
Python型ヒントについて、変数と関数の引数と戻り値に付与…
【まとめ】よく使うLinuxのショートカット11選
【まとめ】よく使うLinuxのショートカット11選
覚えておくべきLinuxコマンド50選
覚えておくべきLinuxコマンド50選
FlaskでFormを用いてPOSTリクエストを行い、送信された値を取得する
FlaskでFormを用いてPOSTリクエストを行い、送信さ…
Flaskでabortを用いてHTTPException例外を強制的に発生させる
Flaskでabortを用いてHTTPException例外…

Primary Sidebar

人気記事

  • 1
    ITエンジニアとしてスキルを高めるためのUdemy講…
  • 2
    PyCharm,IntelliJのおすすめプラグイン一覧
  • no image 3
    Python未経験だが、フリーランスの案件に採用さ…
  • 4
    アメリカのシリコンバレーでプログラミングを無…

特集記事

  • 1
    Cursorの使用のポイントとコツ(コード補完、イ…
  • 2
    ITエンジニアとしてスキルを高めるためのUdemy講…

目次

1 withの基本
2 クラスを定義してwithで用いる
3 withを利用する場面
4 関連記事
StartCode ロゴ
AI時代のエンジニアを最速で育てる
法人向けIT研修で即戦力を育成しています。詳しくはお問い合わせください。
▶ 詳細はこちら
Python講座
【Udemy】Python入門講座(0からPythonの基礎を体系的に学んで、生成AIでバイブコーディング)
受講生3000人ほどの人気講座。<strong>Pythonの基礎から生成AI活用</strong>...
詳細 ▶

Footer

利用規約