关于python:为什么[false,true]中的”not(true)”返回false?

Why does “not(True) in [False, True]” return False?

如果我这样做:

1
2
>>> False in [False, True]
True

返回True。只是因为EDOCX1[1]在列表中。

但如果我这样做:

1
2
>>> not(True) in [False, True]
False

返回False。鉴于not(True)等于False

1
2
>>> not(True)
False

为什么?


算子值优先2.x of the值优先,3.x. notis that of in下比。我知道它是等价的:P></

1
2
>>> not (True in [False, True])
False

是:这是你想要的P></

1
2
>>> (not True) in [False, True]
True

"好点了。这是我的建议:not(True)to write,not True喜欢。它的外观像前makes the function呼叫,而notis an operator,not a函数。P></


evaluated x not in ynot x in yis asP></

你可以看到确切的说因为是怎么发生的disassembling by the队列。第一家工厂as the你期望:P></

1
2
3
4
5
6
7
8
>>> x = lambda: False in [False, True]
>>> dis.dis(x)
  1           0 LOAD_GLOBAL              0 (False)
              3 LOAD_GLOBAL              0 (False)
              6 LOAD_GLOBAL              1 (True)
              9 BUILD_LIST               2
             12 COMPARE_OP               6 (in)
             15 RETURN_VALUE

房屋evaluates to the second,True not in [False, True],which is Falseclearly:P></

1
2
3
4
5
6
7
8
9
>>> x = lambda: not(True) in [False, True]
>>> dis.dis(x)
  1           0 LOAD_GLOBAL              0 (True)
              3 LOAD_GLOBAL              1 (False)
              6 LOAD_GLOBAL              0 (True)
              9 BUILD_LIST               2
             12 COMPARE_OP               7 (not in)
             15 RETURN_VALUE        
>>>

是你而不是我想表达(not(True)) in [False, True]as,which is expected True,and You can see为什么:P></

1
2
3
4
5
6
7
8
9
>>> x = lambda: (not(True)) in [False, True]
>>> dis.dis(x)
  1           0 LOAD_GLOBAL              0 (True)
              3 UNARY_NOT          
              4 LOAD_GLOBAL              1 (False)
              7 LOAD_GLOBAL              0 (True)
             10 BUILD_LIST               2
             13 COMPARE_OP               6 (in)
             16 RETURN_VALUE


算子值优先。inbinds比你知道更多的tightly not,expression is to not((True) in [False, True])等价。P></


它的经营者(inis about not更强的比值优先)。但它easily can be at the right by以增parentheses广场:P></

1
(not(True)) in [False, True]  # prints true

写作:P></

1
not(True) in [False, True]

is the same类:P></

1
not((True) in [False, True])

如果which is in the list True北归来》和"not"of the result。P></


not True in [False, True]which is as评教恩,因为是在[False, True]TrueFalse归来P></

如果你尝试P></

1
2
>>>(not(True)) in [False, True]
True

You get the expected result。P></


alongside the answers of the other is that上述值优先not下比你instatement is to,其实等价:P></

1
not (True in [False, True])

但是,如果你不注意你的condition from the other酮单独使用,Python会角色(2 precedencechaining),以单独的房子,和Python used in this值优先。这也说明,如果你想单独放在You need to condition the condition or not just the对象性括号中的值:P></

1
(not True) in [False, True]

但上述改性AS,there is another在线chaining that is by Python开发者:P></

基于Python的文档:P></

Note that comparisons, membership tests, and identity tests, all have the same precedence and have a left-to-right chaining feature as described in the Comparisons section.

for example of the following statement Falseresult is:P></

1
2
>>> True == False in [False, True]
False

因为Python会声明:the following链类P></

1
(True == False) and (False in [False, True])

确切的说因为是False and Truewhich is that is False。P></

你可以承担,中央共享对象的操作和will be between 2其他对象(在这虚假的房屋)。P></

与已知的比较,也为其真正身份的会员,包括检验和试验及其操作数操作:which areP></

1
in, not in, is, is not, <, <=, >, >=, !=, ==

实例:P></

1
2
>>> 1 in [1,2] == True
False

另一个著名的example is number的范围:P></

1
7<x<20

which is equal to:P></

1
7<x and x<20


为了澄清其他一些答案,在一元运算符后添加括号不会改变其优先级。not(True)并不使notTrue的结合更加紧密。它只是围绕True的一组多余的括号。这和(True) in [True, False]差不多。括号什么都不做。如果希望绑定更紧密,则必须在整个表达式周围加上括号,这意味着运算符和操作数(即(not True) in [True, False])。

要从另一个角度来看,请考虑

1
2
>>> -2**2
-4

**-结合得更紧密,这就是为什么你得到2的平方的负,而不是负2的平方(即正4)。

如果你想要负二的平方呢?很明显,你会加上括号:

1
2
>>> (-2)**2
4

但是,不合理的做法是期望以下内容给予4

1
2
>>> -(2)**2
-4

因为-(2)-2相同。括号完全不起作用。not(True)完全相同。


它让我们看到:检查操作系统,as a collection list is some [False, True]含元素。P></

True in [False, True]as the expression is an True归来,True元素包含在列表中。P></

therefore not True in [False, True]茶",给opposite布尔",notresult expression of the above(without any to preserve parentheses值优先,as has in大值优先比not经营者)。结果Falsenot Truetherefore,威尔。P></

(not True) in [False, True]on the other is equal to,手,False in [False, True],which is True(Falseis the list中包含)。P></