decimal
1.作用:
用于浮点数计算。相比内置的二进制浮点数实现 float这个类型有助于 金融应用和其它需要精确十进制表达的场合,控制精度,控制舍入以适应法律或者规定要求,确保十进制数位精度,或者用户希望计算结果与手算相符的场合。Decimal 重现了手工的数学运算,这就确保了二进制浮点数无法精确保有的数据精度。 高精度使 Decimal 可以执行二进制浮点数无法进行的模运算和等值测试
2.函数:
其实decimal模块最常用的函数就是Decimal()和getcontext(),其他基本很少用,以后用到再细说
Decimal():
简单的查看特性:
运算:
这样太长对不对,所以需要调整精度,则使用函数getcontext():
里面的prec子方法则调整精度的,所以可以先设置好精度再计算:
注意getcontext()函数必须加括号实例化才行【什么是实例在类的章节会提到】
也可以对字符串浮点型进行操作:
说到精度,那不得不提到round()这个BIF
round()如果只有一个数作为参数,类似四舍五入。当出现.5的时候,round()取靠近的偶数,这就是为什么round(2.5) = 2。当指定取舍的小数点位数的时候,一般情况也是使用四舍五入的规则,但是碰到.5的这样情况,如果要取舍的位数前的小数是奇数,则直接舍弃,如果偶数则向上取舍。所以它不是简单意义上的四舍五入,而是ROUND_HALF_EVEN的策略
格式化也可以得到想要的精度:
python默认的是17位小数的精度,但是如果想得到更高精度的使用格式化则不行:
可以显示这么多,但是发现没,10除以3会等于一个3.00……,大家都知道等于3.333……对吧?所以不准确,所以在高精度时使用格式化不行
再看看前面提到的decimal模块的getcontext,prec就是默认的精度,显示为28位,也可以设置为50位甚至更高,都可以。这样在分析复杂的浮点数的时候,可以有更高的自己可以控制的精度。
math模块的ceil()和floor()也有点这么个意思,自行体会
fractions
1.作用:
表达分数的模块
2.函数:
这个模块的方法很少,并且其实用得也挺少,基本就是拿来表示分数的Fraction而已
也可以对字符串浮点型进行操作:
operator
1.作用:
operator模块是python中内置的操作符函数接口,它定义了一些算术和比较内置操作的函数。operator模块是用c实现的,所以执行速度比python代码快
2.函数:
其实operator模块的方法基本和常用逻辑操作符和内置运算函数一样,但是你记住比直接使用操作符来运算速度更快就行了:
但是itemgetter函数要特别提一下:
operator模块提供的itemgetter函数用于获取对象的哪些维的数据,参数为一些序号,例:
可见,此时的itemgetter函数的参数为索引
那么这个函数最常用的地方在哪?
结合sorted函数进行排序:
因为key可以接受一个函数(或者匿名函数),所以其实发现功效是一样的【匿名函数在自定义函数那一章详解】
collections
1.作用:
提供许多有用的集合类
2.函数:
老规矩,我只解析常用方法
namedtuple
因为tuple
可以表示不可变集合,例如,一个点的二维坐标: p = (3, 7)。也可以用namedtuple
来表示:
很强势对不对?
看看方法:
有没有发现,它其实就是用来表示这些的?
deque:使用列表存
储数据时,按索引访问元素很快,但是插入和删除元素就很慢,因为列表是线性存储
,数据量大的时候,插入和删除效率很低。deque为了高效实现插入和删除操作的双向列表,适合用于队列和栈:
其实和列表的一般方法没什么区别,就是速度快,deque除了实现list的append和pop,还有appendleft和popleft,这样就可以非常高效地往头部添加或删除元素。
defaultdict:使用dict时,如果引用的Key不存在,就会抛出KeyError
。如果希望key不存在时,返回一个默认值,就可以用它:
注意默认值是调用函数返回的,而函数在创建defaultdict时传入,除了在Key不存在时返回默认值,(其实在之前也讲解了当访问参数不存在时,返回一个值的,自己去翻前面的文章,绝对讲过),defaultdict的其他行为跟dict是完全一样的
orderedDict:使用dict时,Key是无序的。在对dict做迭代时,我们无法确定Key的顺序。
如果要保持Key的顺序,可以用orderedDict:
注意,orderedDict的Key会按照插入的顺序排列
Counter:
是一个简单的计数器:
从上面看Counter其实也是dict的一个子类