我正在测试一些代码
True = 2
print 1 - (1 == 1)
print True == (1 == 1)
然后我期待:
-1
True
但我得到了这个:
0
False
所以,我做了任何 python 程序员都会做的事情:反汇编它。
def f():
True = 2
print 1 - (1 == 1)
print True == (1 == 1)
2 0 LOAD_CONST 1 (2)
3 STORE_FAST 0 (True)
3 6 LOAD_CONST 2 (1)
9 LOAD_CONST 2 (1)
12 LOAD_CONST 2 (1)
15 COMPARE_OP 2 (==)
18 BINARY_SUBTRACT
19 PRINT_ITEM
20 PRINT_NEWLINE
4 21 LOAD_FAST 0 (True)
24 LOAD_CONST 2 (1)
27 LOAD_CONST 2 (1)
30 COMPARE_OP 2 (==)
33 COMPARE_OP 2 (==)
36 PRINT_ITEM
37 PRINT_NEWLINE
38 LOAD_CONST 0 (None)
41 RETURN_VALUE
然后就有点清楚了,是用COMPARE_OP (==)
. Witch 应该返回一个布尔值,但它似乎返回一个整数。任何想法为什么?
编辑:
简而言之,吸取的教训:更改 True 或 False 的值不会改变布尔逻辑在幕后的表示方式。