どーも Takeです。
この記事では、Pythonの「with構文」について簡単に解説します。
結論からいいますが、with構文がわからなくてもプログラミング開発はできます。
私は Python を学び始めた当初、まったくwith構文がわかりませんでした。
しかし、知っているとより簡単にソースコードが書くことが可能になり、可読性が向上します。
- 可読性の向上(ソースコードが読みやすくなります!)
- 安全性の向上(エラー処理なしに処理できます!)
この記事では with構文とは何なのか?どう使うのか?簡単にまとめます。
with構文とは?
Pythonのwith構文とは、ある処理の開始~終了を「簡単に」「安全に」書くことができる構文です。
1 |
with 開始~終了までの処理 |
with構文はファイルのオープン、クローズ処理やデータベースへの接続処理などに使われます。
それでは、つぎに具体的にソースコードを用いて説明します。
with構文の具体例
例として Python で「ファイルの中身を読み込む処理」を「with構文」がある場合、ない場合で説明します。
まずは「with構文なし」の例を下記に示します。
1 2 3 |
f = open('test.csv') print(f.read()) f.close() |
これは「test.csv」ファイルの中身を表示させる処理を行っていますが、
ファイルの中身を表示させるためには
ファイルを開くための「open」関数、ファイルを閉じるための「close」関数を利用する必要があります。
上記に対し、「with構文あり」の例を下記に示します。
1 2 3 4 |
with open('test.csv') as f: s = f.read() print(s) |
こちらも同様に「test.csv」ファイルの中身を表示させる処理を行っていますが、
上記に比べすっきりかけている(可読性が向上している)のではないでしょうか?
また、こちらでは明示的にファイルを閉じるための処理の記載が不要です。
これら2つのソースコードは同じ3行くらいの短い処理ですが、
仮にこれが100行、200行などの大規模な処理の場合、ファイルのクローズ処理を忘れてしまうケースがあります。
クローズ処理をし忘れたために次の処理が動作し、ファイルアクセスできず後続処理ができなくなる...
そういったリスクを with構文は回避できます。
- ソースコードがすっきりする!(可読性が向上!)
- 終了処理を書かなくてよい!(安全性の向上!)
with構文で使えるクラスの実装方法
少し難しい話ですが、Python では自分で作成したクラスをwith構文で利用できます。
クラスを実装する場合、下記2つのメソッドを定義します。
- __enter__(self)
- __exit__(self, exc_type, exc_val, exc_tb)
例えば下記のようなソースコードがあるとします。
1 2 3 4 5 6 7 8 9 10 |
class MyClass(object): def __enter__(self): print("enter") def __exit__(self, exc_type, exc_val, exc_tb): print("exit") with MyClass() as m: print("処理開始!") |
これは「MyClass」クラスを定義し、その中に「__entry__」「__exit__」の2つのメソッドを実装します。
「with MyClass() as m:」でクラスを呼び出すと、下記のようになります。
1 2 3 |
enter 処理開始! exit |
この結果は下記のような流れが動作したためです。
- 処理が開始し「__entry__」メソッド処理が実行され、「entry」が表示されます。
- with 内の処理が実行され、「処理開始!」が表示されます。
- 処理が終了し「__exit__」メソッド処理が実行され、「exit」が表示されます。
最後に
いかがでしたでしょうか?
Pythonの「with構文」について簡単に解説しました。
この記事を参考にぜひ「with構文」を使いこなして下さい!
ではでは。