以下代码并不报错,而我理解在"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"
왼쪽에서 오른쪽으로 계산
괄호는 이 사실을 바꾸지 않습니다
다음 게시물을 읽어보는 것이 좋습니다.
파이썬의 and 및 or 연산의 핵심 아이디어 ——— 단락 논리
예제에서
와 동일합니다.and
앞의x == 10
은False
이므로and
가 나타날 때까지 모든 후속or
표현식은 단락되고and
왼쪽의 표현식이 출력됩니다. toor
의 왼쪽은 다음 논리 연산에 참여하지만 찾지 못하므로and
의 오른쪽의(y - 1 == 199)
표현식은 그대로 무시됩니다. 이는 air
과 유사해야 합니다. 으아악x == 10
을x == 100
으로 바꾸면and
의 왼쪽은True
이 되고 오른쪽의 표현식은 단락할 수 없으며 이때 논리연산에 참여해야 합니다. , 로컬 변수y
가 생성되지 않았으므로 오류가 보고됩니다. 오류 내용은1!!!!!!!!!!!!!!!!!!!!!!!!!