どこかに記事がありそうな気もしますが、備忘録もかねて…。
実際にやってみる
以下のようなコードを実行する。
sample.py
a = 0
if b == 1 and a == 1:
print('passed')
else:
print('failed')
変数 b は定義されていないが、一つ目の条件式に登場する。
実行結果
$ python sample.py
Traceback (most recent call last):
File "aaa.py", line 3, in <module>
if b == 1 and a == 1:
NameError: name 'b' is not defined
変数 b が定義されてないというエラーが出る。当然である
条件式の前後を入れ替える
コードを以下のように変更する。
sample.py
a = 0
if a == 1 and b == 1:
print('passed')
else:
print('failed')
変数 a は定義されているが、値が一致しない。
変数 b は and の後に登場する。
実行結果
$ python sample.py
failed
エラーが出ることなく処理が完了した。
まとめ
どうやら and で繋いだ条件式の場合、False になった時点でそれ以降の式を無視するらしい。
インタープリタなのでそういうもんなんでしょうかね。