为什么十六进制数会自动转换为十进制数?

Why are hexadecimal numbers automatically converted to decimal?

我正在开发一个 Python 小方法,该方法需要从另一个表示键和值的文件中读取字典。

但我似乎 运行 对我发送的数值表示有疑问。例如,我字典中的某些键如下所示:

id_dict = {
    'val_a': 0x0000,
    'val_b': 0x1000
}

但我注意到,当我尝试遍历字典时,十六进制值被替换为十进制值。即使在字典所在的原始 id_dict.py 中,数字也会自动从十六进制转换。

这是我尝试遍历它的结果:

for k,v in id_dict.items():
    print(k,v)

#Results
val_a 0
val_b 4096

有人能告诉我为什么这些值以十进制形式表示,而不是以它们最初存储的十六进制形式表示吗?

如果有办法停止自动转换,那也很好理解!

Can someone tell me why the values are being represented in decimal form and not in the hexadecimal form that they are originally stored in?

它们最初不是以十六进制存储的。 Python 不追踪任何关于基地的信息;无论您在源代码中键入 0x1000 还是 4096,它都是相同的数字,并且 Python 以相同的方式存储它。

当Python打印一个数字时,它必须选择一个基数来显示它,默认总是十进制。如果要以不同的方式打印,则需要指定不同的方式进行字符串转换,例如hex函数:

>>> print 0x1000
4096
>>> print hex(0x1000)
0x1000

Python 以相同的方式存储数字,唯一不同的是格式。你的问题是数字是如何格式化的,而不是表示的,因此,你用字符串格式化解决了你的问题:

>>> d = {k:v for k,v in zip('abcdefg',range(1,5000,313))}
>>> d
{'e': 1253, 'g': 1879, 'a': 1, 'd': 940, 'c': 627, 'b': 314, 'f': 1566}
>>> for k,v in d.items():
...   print("{} {:#06x}".format(k,v))
... 
e 0x04e5
g 0x0757
a 0x0001
d 0x03ac
c 0x0273
b 0x013a
f 0x061e