Pythonのpass文の凝った使い方

295, 2021-07-27

目次

Pythonのpass文の凝った使い方

Pythonには何もしない命令、pass文があります。

Pythonでは何も処理を書きたくない場合にこのpass文を書きます。
「なにもしない」という意味の文で、意外とよく使われる文の1つです。
結論から言うとpass文は↓のように書きます。

pass

単純やね

この記事ではPythonのpass文について↓を見ていきます。

  • pass文の書き方

  • pass文の使い道

  • if文とpass文

  • for文とpass文

  • while文とpass文

  • 関数とpass文

  • クラスとpass文

  • 例外処理とpass文

pass文の書き方

pass文は↓のような構造になっています。

pass_stmt ::=  "pass"

非常に単純な文で、「pass」と書くだけで成立します。
コードにすると↓のようになります。

pass

pass文はその文脈でなにもしない命令です。
たとえば↓のようなコードも合法です。

print('Hello')
pass
print('World')

↑のコードを実行すると↓のような結果になります。

Hello
World

↑のようにpass文はなんら他のコードに影響を与えません。
本当に何もしない命令です。
このpass文に何か使い道があるのでしょうか?

pass文の使い道

pass文の使い道とは、Pythonの文法の特徴と合致します。
つまりPythonの文法上、pass文が必要になるということです。

Pythonはインデントでコードの階層を表現しています。
そのためif文やfor文などで空っぽのif文やfor文を書くということができません。
インデントで空っぽを表現しようとしても、Pythonがその意味を認識してくれないからです。

そこで「ここは空っぽですよ」という表現に使われるのがpass文です。
「なにもしない」という存在が文の中にあることで、空っぽのif文やfor文を表現できるようになります。

if文とpass文

if文でpass文を使う例です。
↓のようにコードを書きます。

if 1 == 1:
    pass

↑の場合、if文の条件式1 == 1は真なのでif文の中身が実行されます。
if文の中身はpassになっているので、if文が真になっても何も実行されません。

if 1 == 0:
    print('同じ')
else:
    pass

↑の場合は、if文の条件式は1 == 0です。これは真になることはありません。
そのためelseの内容が実行されますが、pass文が書かれているためelseが実行されても何も起こりません。

for文とpass文

for文とpass文の組み合わせです。
↓のようなコードを書きます。

for i in range(4):
    pass

↑の場合、for文は0から4より下まで、つまり4回回ります。
しかしfor文の中にはpass文が書かれているだけなので、なにも実行されません。
注意したいのはfor文の中身は何もありませんが、for文自体は実行されるということです。
つまりカウント変数i0から4より下までカウントされるということになります。

for i in range(4):
    print(i)
else:
    pass

↑の場合、for文の中身はprint(i)になっているので、カウント変数iが出力されます。
for ~ elseelsefor文が最後まで完了したときに実行されますが、この中にはpass文が書かれているだけなので、なにも実行されません。
↑のコードを実行すると↓のような結果になります。

0
1
2
3

while文とpass文

while文とpass文の組み合わせです。
↓のようなコードが考えられます。

while True:
    pass

↑のコードを実行すると、無限ループになります。
while文の条件式はTrueなので、while文の中身が実行されます。
中身はpassになっているので、実際には何も実行されません。
しかし、while文の条件式はTrueであり続けるので「なにもしない」ループが延々と実行されます。

このようなループを無限ループやビジーループなどと言います。

関数とpass文

なにもしない関数というのもあります。
これもpass文を組み合わせて書きます。
たとえば↓のようにです。

def func():
    pass

↑のfuncは関数ですが、関数の中身はpass文が1行書かれているだけです。
この関数は何もしないので、呼び出しても他のコードに影響を与えることはありません。

クラスとpass文

クラスにpass文を書くことも出来ます。
↓のようにです。

class Empty:
    pass

↑の場合、クラスEmptyは何の属性も持たない空のクラスです。
__init__()などのメソッドも何も持っていません。

空のクラスなんて何に使うのでしょうか?
活用例の1つがネームスペースとして使う方法です。

class humans:
    pass

humans.taro = Taro()
humans.kenji = Kenji()

↑のようにhumansというネームスペースを作っておいて、そのネームスペースの属性にいろいろ保存します。
このようにすると複数のオブジェクトを1つのネームスペースにまとめることが出来ます。

例外処理とpass文

例外処理ではpassがよく使われます。
たとえば例外を握りつぶしたいときです。
例外が発生しても、その例外を無視して処理を続行したい場合などにpass文は使われます。

try:
    1 / 0
except ZeroDivisionError:
    pass

↑の場合、1 / 00除算エラーが発生しています。
これは数は0で割ってはいけないというエラーです。
そのためZeroDivisionErrorが発生してますが、exceptの中身はpass文だけになってます。
そのため例外が発生しても特に何か行われるということはありません。

このように例外処理とpass文を組み合わせると、例外を握りつぶすことが可能です。
しかしあまり頻繁に例外を握りつぶしていると、設計に難が出てきますのでほどほどにしておきましょう。

おわりに

今回はPythonのpass文について見てみました。
pass文は比較的に利用頻度の高い文の1つと言えます。

次は君の番だよ

passします