while文のelse節

入門Python3 4.4.3


PythonのwhileですがC#とかには無い機能があります。

else節を書いておくとwhileが正常終了した場合に一度だけ処理されます。

i = 0
while i < 5:
    print(i)
    i += 1
else:
    print("end")
$ py main.py
0
1
2
3
4
end

breakした場合にはelse節には遷移しません。

i = 0
while i < 5:
    print(i)
    i += 1
    if i == 3:
        break
else:
    print("end")
$ py main.py
0
1
2

ちなみに本書ではこの機能の事を仕様が若干わかりにくいのでbreakがあるときには呼ばれないので、breakチェッカーと考えようと書いていたが、関数内でreturnした時でも呼ばれなかったのでちょっと適切じゃないかなぁという気もします。

def while_check():
    i = 0
    while i < 5:
        print(i)
        i += 1
        if i == 3:
            return # retunでループを抜けてみる
    else:
        print("end")

while_check()
$ py main.py
0
1
2

returnでも「end」が出力されてませんね。