这个变量声明如何在python中工作?

时间:2015-10-29 17:42:23

标签: python python-2.7 hex

i = 0x0800

我在这里理解的是0x0800是十六进制数,其中'0x'表示十六进制类型,后面的数字'0800'是一个2字节的十六进制数。在将其分配给变量'i'时,如果检查其类型,则会出现此错误

>>> type(i)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable

在这里我得出'i'假设是一个int对象。当我尝试这个时,我变得更加困惑

>>> print i
2048

究竟什么是'2048'..谁能在这里发光?

2 个答案:

答案 0 :(得分:9)

i是一个整数,但您重新定义type

>>> i = 0x0800
>>> i
2048
>>> type(i)
<type 'int'>
>>> type = 42
>>> type(i)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>> del type
>>> type(i)
<type 'int'>

注意type = 42行;我创建了一个新的全局名称type,它在内置之前找到。您还可以在Python 2中使用import __builtin__; __builtin__.type(i),或在Python 3中使用import builtins; builtins.type(i)来访问原始的内置type()函数:

>>> import __builtin__
>>> type = 42
>>> __builtin__.type(type)
<type 'int'>
>>> type(type)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable
>>> del type
>>> type(type)
<type 'type'>

0x表示法只是指定整数文字的几种方法之一。您仍然在生成一个常规整数,只有语法用于定义值的方式与此不同。以下所有表示法都会产生完全相同的整数值:

0x0800          # hexadecimal
0o04000         # octal, Python 2 also accepts 0400
0b100000000000  # binary
2048            # decimal

请参阅Integer Literals reference documentation

答案 1 :(得分:0)

我会迅速提出我想出的答案......

i = 0x0800会将十六进制数(0800)的等效值赋给i。

因此,如果我们归结为碎片,那么就像

 >>> i
 2048
 >>> 
 >>> (pow(16,3) * 0) + ( pow(16,2) * 8 ) + (pow (16,1) * 0 ) + (pow(16,0) * 0)
 2048