A 是一个列表变量,定义如下:
A= [10 ,78,"m",89]
为什么在python shell中执行时A[0]
和的值相同?A[-0]
0
并且-0
是同一件事,因为它们都是integer
:
>>> dis.dis(lambda x: 0)
1 0 LOAD_CONST 1 (0)
3 RETURN_VALUE
>>>
>>> dis.dis(lambda x: -0)
1 0 LOAD_CONST 1 (0)
3 RETURN_VALUE
>>>
但是,有一个负零和正零,其中float
和double
。并且解析器不会跳过符号:
>>> dis.dis(lambda: 0.0)
1 0 LOAD_CONST 1 (0.0)
3 RETURN_VALUE
>>> dis.dis(lambda: -0.0)
1 0 LOAD_CONST 1 (-0.0)
3 RETURN_VALUE
>>>
在负零的情况下,最后一位是1
,在正零的情况下,最后一位是0
。在这里你可以看到它:
>>> from struct import pack, unpack
>>>
>>> # with float, 32th bit is 1 in negative zero
>>>
>>> '0x%.8x' % unpack('I', pack('f', -0.0))[0]
'0x80000000'
>>> '0x%.8x' % unpack('I', pack('f', 0.0))[0]
'0x00000000'
>>>
>>> unpack('I', pack('f', -0.0))[0] >> 31
1L
>>> unpack('I', pack('f', 0.0))[0] >> 31
0
>>>
>>> # same thing with double, 64th bit is 1
>>>
>>> '0x%.16x' % unpack('Q', pack('d', 0.0))[0]
'0x0000000000000000'
>>> '0x%.16x' % unpack('Q', pack('d', -0.0))[0]
'0x8000000000000000'
>>>
>>> unpack('Q', pack('d', 0.0))[0] >> 63
0
>>> unpack('Q', pack('d', -0.0))[0] >> 63
1L
>>>
您可以阅读有关IEEE 浮点的更多信息。
因为-0
是相同的值0
:
>>> -0
0
您指的是相同的索引,列表的第一个值。没有负整数零这样的东西。
也许您正在寻找-1
相反的东西?负整数从末尾选择:
>>> A = [10, 78, "m", 89]
>>> A[0]
10
>>> A[-1]
89
>>> -0 == 0
True
所以基本上你在看同一个元素。