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(14)--模块decimal, fractions,operator,collections以及精度介绍的更多相关文章

  1. Python常用模块中常用内置函数的具体介绍

    Python作为计算机语言中常用的语言,它具有十分强大的功能,但是你知道Python常用模块I的内置模块中常用内置函数都包括哪些具体的函数吗?以下的文章就是对Python常用模块I的内置模块的常用内置 ...

  2. 洗礼灵魂,修炼python(69)--爬虫篇—番外篇之feedparser模块

    feedparser模块 1.简介 feedparser是一个Python的Feed解析库,可以处理RSS ,CDF,Atom .使用它我们可从任何 RSS 或 Atom 订阅源得到标题.链接和文章的 ...

  3. 洗礼灵魂,修炼python(85)-- 知识拾遗篇 —— 深度剖析让人幽怨的编码

    编码 这篇博文的主题是,编码问题,老生常谈的问题了对吧?从我这一套的文章来看,前面已经提到好多次编码问题了,的确这个确实很重要,这可是难道了很多能人异士的,当你以为你学懂了,在研究爬虫时你发现你错了, ...

  4. 洗礼灵魂,修炼python(88)-- 知识拾遗篇 —— 线程(2)/多线程爬虫

    线程(下) 7.同步锁 这个例子很经典,实话说,这个例子我是直接照搬前辈的,并不是原创,不过真的也很有意思,请看: #!usr/bin/env python #-*- coding:utf-8 -*- ...

  5. python高级-模块(14)

    一.python中的模块 有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt函数,必须用语句#include <math.h>引入math.h这个头文件,否则是无法正常进行调用的. ...

  6. python random模块(14)

    random 模块包括返回随机数的函数,可以用于模拟或者任何产生随机输出的程序. 一.random模块常用函数介绍 random.random() — 生成一个从0.0(包含)到 1.0(不包含)之间 ...

  7. python基础-模块

    一.模块介绍                                                                                              ...

  8. python 各模块

    01 关于本书 02 代码约定 03 关于例子 04 如何联系我们 1 核心模块 11 介绍 111 内建函数和异常 112 操作系统接口模块 113 类型支持模块 114 正则表达式 115 语言支 ...

  9. Day5 模块及Python常用模块

    模块概述 定义:模块,用一砣代码实现了某类功能的代码集合. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,提供了代码的重用性.在Python中,一个.py文件就称之为一个模块(Mod ...

随机推荐

  1. 记hangfire后台任务运行一段时间后不运行了。

    什么是Hangfire Hangfire 是一个开源的.NET任务调度框架,目前1.6+版本已支持.NET Core.个人认为它最大特点在于内置提供集成化的控制台,方便后台查看及监控. https:/ ...

  2. http接口测试(python)

    对http接口的测试使用requests库即可实现 1.首先安装requests库 直接在命令行中输入以下命令即可安装: pip install requests 2.写一个简单的例子测试下(以百度为 ...

  3. .net core Jenkins持续集成Linux、Docker、K8S

    jenkins插件 系统管理 -> 管理插件,安装如下插件. #如果搜索不到去掉Plugin在搜索 GitLab Plugin Gitlab Hook Plugin #使用Gitlab账号做用户 ...

  4. TCP/IP 笔记 - 超时和重传

    TCP协议为了提供可靠的数据传输服务,会启动数据重传来解决下层网络层(IP)可能出现的数据包丢失. 超时重传介绍 TCP重传由两套独立机制来完成重传,基于时间的超时重传(RTO,TCP发送数据时会设置 ...

  5. EntityFramework使用总结(与MVC4.0实现CURD操作)

    本篇文介绍一下Entity Framework Code First的简单用法,通过一个学生信息的增删查改来学习Entity Framework的使用及与存储过程的交互.我也是学习Entity Fra ...

  6. 深入JAVA注解(Annotation):自定义注解 (转)

    原文出自:http://blog.csdn.net/yjclsx/article/details/52101922 一.基础知识:元注解 要深入学习注解,我们就必须能定义自己的注解,并使用注解,在定义 ...

  7. springboot json返回null问题处理

    在开发过程中,我们需要统一返回前端json格式的数据,但有些接口的返回值存在 null或者""这种没有意义的字段.以上不仅影响理解,还浪费带宽,这时我们可以统一做一下处理:不返回空 ...

  8. 如何在 Linux 服务器上部署多个 Tomcat

    开发管理项目时多多少少会遇到服务器不够用.一个项目分成多个子项目的情况,故研究了一下如何在一台服务器部署多个 Tomcat. 具体操作: 1.在 /tomcat/ 下部署多个 tomcat. 2.修改 ...

  9. Ansible系列(五):各种变量定义方式和变量引用

    Ansible系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 1.1 ansible facts facts组件是用来收集被管理节点信息的 ...

  10. 深入浅出 JVM GC(2)

    # 前言 在 深入浅出 JVM GC(1) 中,限于上篇文章的篇幅,我们留下了一个问题 : 如何回收? 这篇文章将重点讲述这个问题. 在上篇文章中,我们也列出了一些大纲,今天我们就按照那个大纲来逐个讲 ...