1、变量与数据类型
1.1 对浮点型数据执行精确运算
在python中进行浮点数计算时会出现计算结果与数学计算结果不一致的情况,如:
print(0.35+0.3+0.35)
输出:0.9999999999999999
print(0.3+0.3+0.3)
输出:0.8999999999999999
这是因为一些较为简单的浮点数在计算机内部转化为二进制的时候会变为无限循环小数,计算机会进行四舍五入,导致再转化为十进制时,会出现精度丢失的情况。
可以使用decimal模块下的Decimal方法来对这个问题进行解决,在对浮点数进行计算的时候可以得到精确的结果。
from decimal import *
print(Decimal('0.3')+Decimal('0.3')+Decimal('0.35'))
输出:1.00
并且它还可以和计算数据的精度进行匹配。
采用普通浮点数计算:
print(2.20+1.80)
输出:4.0
采用Decimal方法:
from decimal import *
print(Decimal('2.20')+Decimal('1.80'))
输出:4.00
Decimal方法可以根据需要,搭配getcontext().prec函数设置数据的有效数字。其用法为getcontext().prec=x,x为想要的精度,如x=3,代表我想要得到保留3位有效数字的结果。
from decimal import *
getcontext().prec=4
print(Decimal(2.20)+Decimal(1.80))
输出:4.000
需要注意的是:Decimal方法中建议传入字符串形式的浮点数,如果直接传入浮点数结果往往依然不精确:
from decimal import *
print(Decimal(2.20)+Decimal(1.80))
输出:4.000000000000000222044604925
1.2 动态类型与静态类型
Python能自由改变变量类型,所以被称之为动态类型语言。需要注意的是,并不是所有的语言都支持动态类型。