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