Python如何解释''ab'中的''a'是真的“?我试图评估以下两个表达式:
>>> 'a' in 'abc' is True:
False
>>> ('a' in 'abc') is True:
True
(我知道“is”关键字一般不应用于与True
比较,这只是一个例子)
答案 0 :(得分:10)
有趣的问题!
以下是'a' in 'abc' is True
的字节码:
>>> import dis
>>> dis.disassemble((lambda: 'a' in 'abc' is True).func_code)
2 0 LOAD_CONST 1 ('a') # stack: 'a'
3 LOAD_CONST 2 ('abc') # stack: 'a' 'abc'
6 DUP_TOP # stack: 'a' 'abc' 'abc'
7 ROT_THREE # stack: 'abc' 'a' 'abc'
8 COMPARE_OP 6 (in) # stack: 'abc' True
11 JUMP_IF_FALSE_OR_POP 21 # stack: 'abc'
14 LOAD_GLOBAL 0 (True) # stack: 'abc' True
17 COMPARE_OP 8 (is) # stack: False
20 RETURN_VALUE
>> 21 ROT_TWO
22 POP_TOP
23 RETURN_VALUE
与('a' in 'abc') is True
:
>>> import dis
>>> dis.disassemble((lambda: ('a' in 'abc') is True).func_code)
1 0 LOAD_CONST 1 ('a') # stack: 'a'
3 LOAD_CONST 2 ('abc') # stack: 'a' 'abc'
6 COMPARE_OP 6 (in) # stack: True
9 LOAD_GLOBAL 0 (True)
12 COMPARE_OP 8 (is)
15 RETURN_VALUE
所以似乎表达式'a' in 'abc' is True
大致评估为:
>>> 'a' in 'abc' and 'abc' is True
这似乎是操作符链接的结果:https://stackoverflow.com/a/19751586/71522 - 使1 < 5 < 10
正常工作的相同魔法。
非常有趣!
(注意:这是通过CPython 2.7.2完成的)