Python如何解释“'abc'中的'a'为真”?我试图评估以下两个表达式:
>>> 'a' in 'abc' is True:
False
>>> ('a' in 'abc') is True:
True
(我知道“is”关键字通常不应该用于比较True
,这只是一个例子)
Python如何解释“'abc'中的'a'为真”?我试图评估以下两个表达式:
>>> 'a' in 'abc' is True:
False
>>> ('a' in 'abc') is True:
True
(我知道“is”关键字通常不应该用于比较True
,这只是一个例子)
有趣的问题!
这是来自的字节码'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 完成的)