python的if语句中的行为差异

Wyc*_*ycG 0 python

我有两个陈述,我的朋友向我声称他们不一样.我相信他们是.我想知道他们是否是,如果他们不是,那么行为是不同的例子.

if (n != p and c/n > 5.15):

if (c/n > 5.15 and n !=p):
Run Code Online (Sandbox Code Playgroud)

Bre*_*arn 6

由于它们的短路行为,它们可能会有所不同and.如果第一个操作数and为false,则不计算第二个操作数.因此,如果c/n > 5.15引发异常(例如,如果n为零),则第一个if可能起作用(即,不引发任何错误),而第二个引起错误.这是一个例子:

c = 0
n = 0
p = 0

# No error, no output because the condition was not true
>>> if (n != p and c/n > 5.15):
...     print "Okay!"

# Raises an error
>>> if (c/n > 5.15 and n !=p):
...     print "Okay!"
Traceback (most recent call last):
  File "<pyshell#23>", line 1, in <module>
    if (c/n > 5.15 and n !=p):
ZeroDivisionError: division by zero
Run Code Online (Sandbox Code Playgroud)