以下代码并不报错,而我理解在"point 1"处如果先运算小括号里面的表达式,而y并不存在,不应该报错吗?难道发现x == 10的短路运算优先于小括号里面的表达式运算?
将这一行中x == 10改为x == 100后报错了,这个理解没问题。
# coding: utf-8
if __name__ == "__main__":
x = 100
if x == 10:
y = 200
# no y exist here
if x == 10 and (y - 1 == 199): # point 1
print "ok"
左から右に計算します
括弧を付けてもこの事実は変わりません
これは正常です。この投稿を読むことをお勧めします。
Python の and および or 演算の中心的な考え方 ——— 短絡ロジック
この例では、
と同等です。and
の前のx == 10
はFalse
であるため、後続のすべてのand
式はor
が表示されるまで短絡され、and
の左側の式が出力されます。or
の左側は次の論理演算に参加しますが、見つからないため、and
の右側の式(y - 1 == 199)
は直接無視されます。これは、空気
と同様になるはずです。 リーリーx == 10
をx == 100
に変更すると、and
の左側はTrue
になります。このとき、右側の式は短絡できず、論理演算に参加する必要があります。ローカル変数y
が作成されていないため、エラーの内容はこの1!!!!!!!!!!!!!!!!