洗礼灵魂,修炼python(14)--模块decimal, fractions,operator,collections以及精度介绍
2018-03-02 12:28
701 查看
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的一个子类
相关文章推荐
- 洗礼灵魂,修炼python(13)--模块random,math,pickle
- 洗礼灵魂,修炼python(11)--python函数,模块
- 洗礼灵魂,修炼python(34)--面向对象编程(4)—继承
- 洗礼灵魂,修炼python(34)--面向对象编程(4)—继承
- Python提供了以下几个内置tools模块:operator collections itertools functools
- 洗礼灵魂,修炼python(26)--编程核心之“递归”
- 洗礼灵魂,修炼python(35)--面向对象编程(5)—多重继承,组合
- 洗礼灵魂,修炼python(1)--python简介
- 洗礼灵魂,修炼python(22)--自定义函数(3)—函数作用域,闭包
- 洗礼灵魂,修炼python(27)--异常处理(1)—>了解异常
- 洗礼灵魂,修炼python(36)--面向对象编程(6)—类的相关内置函数issubclass,hasattr等
- 洗礼灵魂,修炼python(23)--自定义函数(4)—闭包进阶问题—>报错UnboundLocalError: local variable 'x' referenced before assign
- 洗礼灵魂,修炼python(15)--列表进阶话题—>列表解析/列表生成器
- python decimal和fractions模块
- 洗礼灵魂,修炼python(29)--装饰器(1)—>利用经典案例解析装饰器概念
- 洗礼灵魂,修炼python(37)--面向对象编程(7)—了解魔法方法
- 洗礼灵魂,修炼python(5)--python操作符,内置函数
- 洗礼灵魂,修炼python(17)--跨平台操作三剑客—os,os.path.sys模块
- 洗礼灵魂,修炼python(24)--自定义函数(5)—匿名函数lambda
- 洗礼灵魂,修炼python(30)--装饰器(2)—>装饰器总结+进阶使用