2.1Python中的数据类型
在Python
中,数据可以分为如下类型:
- 数值类型
- 整数类型(
int
) - 浮点类型(
float
) - 复数类型(
complex
) - 布尔类型(
bool
) - 序列类型
- 列表(
list
) - 元组(
tuple
) - 字符串(
str
) - 字节(
bytes
) - 映射类型(
dict
) - 集合类型(
set
) - 其他内置类型
鸭子类型的概念:
Python
是弱类型语言,在Python
中严格来说,变量是不具有类型的,变量的类型完全取决于其所关联的对象类型,这与其他语言的差别较大(C
,Java
等)。因此经常习惯说Python
的类型为“鸭子类型”,这是一种动态类型的体现。
说明:
- 由于变量必须要关联一个具体的对象,才能确定变量的类型。因此,在定义变量时,不能只给出变量的名字,必须要同时也给出变量所关联的对象。
Python2
中还支持长整数类型(long
),但是这个在Python3
中取消了。
2.2 整数类型
整数类型(int
)是最常使用的类型。数学上使用的整数,例如5,3,-50等,这些都是整数类型。
整数类型支持四种进制表示:
- 二进制(使用0b或0B前缀)
- 八进制(使用0o或0O前缀)
- 十进制(无前缀)
- 十六进制(使用0x或0X前缀,10 ~ 15使用a ~ f或A ~ F表示)
可以调用相应的函数,来对四种进制之间进行转换。
bin()
:将其他进制转换为二进制oct()
:将其他进制转换为八进制int()
:将其他进制转换为十进制hex()
:将其他进制转换为十六进制
2.3 布尔类型
布尔类型(bool)
表示的是一种条件的判断,具有两个值:True
与False
。其中,True
表示条件成立,即为“真”,而False
表示条件不成立,即为“假”。
布尔类型是整数类型的子类型。实际上,True
就是1,False
就是0。因此可以使用布尔类型参与数学上的运算,与使用1与0参与运算的结果是一样的。
2.4 浮点类型
浮点类型(float)
就是数学上的小数类型。例如:1.0,-2.5等,都是浮点类型。在进制表示上,浮点类型仅支持十进制表示(这点不同于整数类型)。除了常规的表示方式外,浮点类型也可以使用数学上科学计数法的形式表示,例如:
1.5e30
说明:
- 十进制的整数类型不能使用0开头,但是,浮点类型可以以0开头。
- 浮点类型的特殊值
浮点类型具有两个特殊值:NaN
(Not A Number)与Infinity
(无穷大),其中无穷大又可分为正无穷(+Infinity
)与负无穷(-Infinity
)。我们可以通过float
函数来获得这些值。NaN
有一个特征,就是自己不等于自己,因此不能通过==
来判断一个数值是不是NaN
。
浮点类型的不精确性:
在使用浮点类型时需要留意,浮点类型在计算机中仅是近似的存储,浮点类型是不精确的。因此需要避免进行如下的操作:
- 避免数量级相差很大的浮点值之间进行运算。
- 避免进行等量的比较。
Decimal
的使用:
考虑到浮点类型的不精确性,因此如果需要进行精确计算,我们可以使用decimal
模块中的Decimal
类来实现,该类提供精确的浮点计算。此外也可以指定Decimal
的计算精度,即计算结果最多保留的有效数字位数,默认为28位有效数字。
2.5 复数类型
Python
中的复数类型(complex)
类似于数学上的复数。含有虚部(使用j或J后缀)的数值为复数类型。例如:3 + 5j,-2 - 3j(数学中虚部后缀为i)。复数分为实部与虚部两个部分,我们可以通过real
与imag
属性分别获取复数的实部与虚部的值。
2.6 类型转换
获取数据类型:
可以通过type()
函数获取变量的类型,准确的讲,应该是获取变量所关联的对象的类型。
类型转换函数:
我们可以在不同的类型之间进行类型转换,Python
中为我们提供了如下的转换函数:
-
int(value)
:将value转换为整数(int
)类型。如果没有参数,返回0。 -
float(value)
:将value转换为浮点(float
)类型。如果没有参数,返回0。 -
complex(real, imag)
:根据实部与虚部(可选)创建一个复数。如果没有参数,返回0j。 -
bool(value)
:value
为真值时,返回True
,否则返回False
。
说明:
- 尽管可以使用转换函数进行类型转换,但并非任意两个类型之间都是能够进行转换的。例如,复数类型就不能够通过
int
或float
转换为整数或浮点类型。- 此外,
int
函数还可以提供第二个参数,指定解析转换时,使用的进制。此时,第一个参数需要是字符串类型(或字节等类型),不能是数值类型。例如:int(“300”, 16)
则会根据16进制来解析300,最终函数返回的结果为768,而不是300。如果没有指定第二个参数,则默认为十进制。