以下代码并不报错,而我理解在"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"
Calculer de gauche à droite
Les parenthèses ne changent rien à ce fait
C'est normal. Il est recommandé de lire ce post :
L'idée de base des opérations et et ou en Python ——— logique de court-circuit
Dans votre exemple, le
;and
avantx == 10
estFalse
, donc toutes les expressionsand
suivantes sont court-circuitées jusqu'à ce queor
apparaisse et que l'expression sur le côté gauche deand
soit affichée à Le côté gauche deor
participe à l'opération logique suivante, mais il n'est pas trouvé, donc l'expressionand
à droite de(y - 1 == 199)
est directement ignorée, ce qui équivaut à airSi vous remplacez
.x == 10
parx == 100
, alors le côté gauche deand
estTrue
. L'expression du côté droit ne peut pas être court-circuitée et doit participer à des opérations logiques. car la variable localey
n'a pas été créée, donc une erreur sera signalée. Le contenu de l'erreur devrait être similaire à ceci1!!!!!!!!!!!!!!!!!!