2013-08-29 53 views
1

我测试闲置象下面这样,但事情错了..蟒蛇比较,事情错了

>>> print 1<>1 
False OK 
>>> print 1<>0 
True  OK 
>>> print False | True 
True  OK 
>>> print False | 1<>0 
True  OK 
>>> print 1<>1 | 1<>0 
False WHY ??? 

回答

6

您正在使用|位或运营商。您可能正在寻找or运营商。 or布尔运算符或运算符。

请注意,<>已弃用,您要真的使用!=

>>> 1 != 1 
False 
>>> 1 != 0 
True 
>>> False or True 
True 
>>> False or 1 != 0 
True 
>>> 1 != 1 or 1 != 0 
True 

在Python中,bool()类型是int()一个亚类中,与True等于1且False等于0,从而使用上TrueFalse位运算符具有相同的输出,就好像这些值分别为整数,而不是:

>>> True == 1 
True 
>>> 10 | True 
11 

但因为|具有比!=(或<>)一个更高先例它执行冷杉ST

>>> 1 != (1 | 1) != 0 
False 
>>> (1 != 1) | (1 != 0) 
True 

or短路,它返回第一个表达式值是布尔真肥胖型(非空对集合的非零数字值)。

+0

易于测试此行为:1 <> 0 | 2对1 <> 0 | 1 –

1

它的运算符优先级相关的问题:

>>> (1<>1) | (1<>0) 
True 

|<>更高的优先级。

1

优先顺序。您的命令被解释为1 <> (1 | 1) <> 0

顺便说一下,您不应该使用<>进行比较。改为使用!=

欲了解更多信息,请查阅operators的文档。

2

您的代码被解释为:

>>> print 1 <> (1 | 1) <> 0 
False 

这是因为order precedence的,在提供的链接有据可查。

非常多的是,按位或运算符的优先级高于不等于运算符<>(请注意,这已被弃用,因此在Python 3中不存在。其他阅读内容可参见here)。因此,它首先被评估,然后接下来解释<>