的Python:打印“字”,在[] ==假

问题描述:

去有点精神在这里试图找出这是什么一样在python:的Python:打印“字”,在[] ==假

print "word" in [] == False 

为什么这个打印False

+4

你有问题吗? – Johnsyweb

+1

如果您希望输出“True”,则需要在parens中将[]'中的单词'分组:'print(“word”in [])== False' – GreenMatt

+2

与布尔值相比毫无意义。 –

也许这种不寻常的行为更明显的例子是:

>>> print 'word' in ['word'] 
True 
>>> print 'word' in ['word'] == True 
False 

你举的例子是等价于:

print ("word" in []) and ([] == False) 

这是因为两个布尔表达式可以组合,意在允许这个缩写:

a < x < b 

此长,但相当表述:

(a < x) and (x < b) 
+1

像'3

+1

我不明白,为什么? –

+1

有什么方法可以看到Python如何在内部评估它?像sql解释 –

就像你可以在23 < x < 42连锁经营,你可以做到这一点与in==

"word" in []False[] == False评估为False。因此,整个结果是

"word" in [] == False 
"word" in [] and [] == False 
False and False 
False 

我想补充马克拜尔斯伟大的答案

>>> import dis 
>>> dis.dis(lambda: 'word' in [] == False) 
    1   0 LOAD_CONST    1 ('word') 
       3 BUILD_LIST    0 
       6 DUP_TOP    
       7 ROT_THREE   
       8 COMPARE_OP    6 (in) 
      11 JUMP_IF_FALSE_OR_POP 21 
      14 LOAD_GLOBAL    0 (False) 
      17 COMPARE_OP    2 (==) 
      20 RETURN_VALUE   
     >> 21 ROT_TWO    
      22 POP_TOP    
      23 RETURN_VALUE   
>>> dis.dis(lambda: ('word' in []) == False) 
    1   0 LOAD_CONST    1 ('word') 
       3 LOAD_CONST    2 (()) 
       6 COMPARE_OP    6 (in) 
       9 LOAD_GLOBAL    0 (False) 
      12 COMPARE_OP    2 (==) 
      15 RETURN_VALUE