我正在测试一些代码
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 (==)
。它应该返回一个布尔值,但实际上它返回了一个整数。有任何想法是为什么吗?
编辑:
简而言之,从中学到的教训是:改变True或False的值并不会改变其背后表示的布尔逻辑。
True
和False
现在是关键字,你不能给它们赋值。 - Ashwini Chaudhary3>> True == 1
True
- Ignacio Vazquez-Abramsten=42
,你会期望9+1
返回42
吗? - georgten == (9 + 1)
;) - razpeitia