Integral类型:整数、布尔型
浮点类型:float、complex、decimal.Decimal
Python提供了两种内置的Integral类型,即int与bool。整数与布尔型值都是固定的,但由于Python提供了增强的赋值操作符,是的这一约束极少导致实际问题。在布尔表达式中,0与False表示False,其他任意整数与true表示true。在数字表达式中,True表示1,False表示0。
对象的创建可以通过给变量赋字面意义上的值,或将相关的数据类型作为函数进行调用,比如x=int(17)。使用数据类型创建对象时,有3种用例:
两个内置的布尔型对象:True与False。布尔数据类型可以当作函数进行调用——不指定参数时将返回False,给定的是布尔型参数时,会返回该参数的一个拷贝,给定的是其他类型的参数时,则会尝试将其转换为布尔数据类型。所有内置的数据类型与标准库提供的数据类型都可以转换为一个布尔型值,为自定义数据类型提供布尔型转换也很容易。
Python提供了3种浮点值:内置的float与complex类型,以及来自标准库的decimal.Decimal类型。这3种数据类型都是固定的。float类型存放双精度的浮点数,float类型的数值要使用小数点或使用指数表示(0.0、4.、-2.5、-2e9、8.9e-4)。
float数据类型可以作为函数调用——不指定能够参数返回0.0,指定的float型参数返回该参数的一个拷贝,指定其他任意类型的参数时都尝试将其转换为float。用于转换时,可以给定一个字符串参数,或者使用简单的十进制表示,或者使用指数表示。
def equal_float(a, b):
return abs(a-b)<=sys.float_info.epsilon
sys.float_info对象有很多属性,sys.float_info.epsilon是机器可以区分出的两个浮点数的最小区别。
使用int()函数,可以将浮点数转换为整数——返回其整数部分,舍弃其小数部分;或者使用round()函数,该函数将对小数部分四舍五入;或者使用math.floor()函数,或math.ceil()函数——该函数可以将浮点数转换为最近邻的整数(或者向上转换,或者向下转换)。如果浮点数的小数部分为0,float.is_integer()方法将返回True,浮点数的小数表示可以使用float.as_integer_ratio()方法获取。给定浮点数x=2.75,调用x.as_integer_ratio()将返回(11,4)。使用float.hex()方法,可以将浮点数以十六进制形式表示为字符串,相反的转换可以使用float.fromhex()实现。
指数使用p(幂)进行表示,因为e是一个有效的十六进制数。
复数这种数据类型是固定的,其中存放的是一对浮点数,一个表示实数部分,另一个表示虚数部分。复数的两个部分都以属性名的形式存在,分别为real与Imag,例如:
>>> z = -89.5+2.125j
>>> z.real, z.imag
(-89.5, 2.125)
>>> z.conjugate() # 用于改变虚数部分的符号
(-89.5-2.125j)
>>> 3-4j.conjugate()
(3+4j)
复数数据类型可以作为函数进行调用——不给定参数进行调用将返回0j,指定一个复数参数时,会返回该参数的拷贝,对其他任意参数,则尝试将其转换为一个复数。用于转换时,complex()接受的或者是一个字符串参数,或者1或2个浮点数,如果只给定一个浮点数,那么虚数部分被认为是0。
math模块中的函数不能处理复数,需要导入cmath模块,该模块提供了math模块中大多数三角函数与对数函数的复数版,也包括一些复数特定的函数,比如cmath.phase()、cmath.polar()与cmath.rect(),还包括cmath.pi、cmath.e等厂里,这些常量与math模块中对应对象包含相同的浮点值。
要创建Decimal,必须先导入decimal模块。decimal.Decimal()函数接受一个整数或字符串作为参数——但不能以浮点数作为参数,因为浮点数不够精确。如果使用字符串作为参数,就可以使用简单的十进制数表示或指数表示。decimal.Decimals的精确表示方式意味着可以可靠地进行相等性比较。
>>> import decimal
>>> a = decimal.Decimal(9876)
>>> b = decimal.Decimal("54321.012345678987654321")
>>> a+b
Decimal('64197.012345678987654321')
从Python 3.1开始,使用decimal.Decimals from-float()函数将float转换为十进制数,该函数以float型数作为参数,并返回与该float数值最接近的decimal.Decimal。math模块和cmath模块不适于处理decimal.Decimals,但是math模块提供的一些函数可以作为decimal.Decimal的方法使用,比如,要计算 e x e^x ex(x是一个浮点数),可以使用math.exp(x),但是如果x是一个decimal.Decimal,就需要使用x.exp()。decimal.Decimal数据类型还提供了ln()方法,用于计算自然对数(以e为基数),就像带一个参数的math.log()、log10()和sqrt(),以及很多特定于decimal.Decimal数据类型的方法。