Maison > Questions et réponses > le corps du texte
以下代码并不报错,而我理解在"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"
伊谢尔伦2017-04-18 09:33:29
Calculer de gauche à droite
Les parenthèses ne changent rien à ce fait
ringa_lee2017-04-18 09:33:29
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
avant x == 10
est False
, donc toutes les expressions and
suivantes sont court-circuitées jusqu'à ce que or
apparaisse et que l'expression sur le côté gauche de and
soit affichée à Le côté gauche de or
participe à l'opération logique suivante, mais il n'est pas trouvé, donc l'expression and
à droite de (y - 1 == 199)
est directement ignorée, ce qui équivaut à air
Si vous remplacez x == 10
par x == 100
, alors le côté gauche de and
est True
. L'expression du côté droit ne peut pas être court-circuitée et doit participer à des opérations logiques. car la variable locale y
n'a pas été créée, donc une erreur sera signalée. Le contenu de l'erreur devrait être similaire à ceci
NameError: name 'y' is not defined