python的if语句中的行为差异

时间:2014-07-28 19:59:52

标签: python

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

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

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

1 个答案:

答案 0 :(得分: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