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. 使用JDBC连接各种数据库

    项目需要连多钟数据库,把链接的关键部分在这里记录下来. 1.Oracle8/8i/9i数据库(thin模式) Class.forName("oracle.jdbc.driver.Oracle ...

  2. .net core build docker image

    1.创建.net core web项目 2.添加Dockerfile文件 # 基于microsoft/dotnet:2.1-aspnetcore-runtime构建Docker Image FROM ...

  3. abstract、virtual、sealed、 interface、struct 基础知识整理

    abstract abstract 修饰符指示被修改内容的实现已丢失或不完整. abstract 修饰符可用于类.方法.属性.索引和事件. 在类声明中使用 abstract修饰符以指示某个类仅旨在作为 ...

  4. glide使用

    glide在github地址:https://github.com/bumptech/glide 1.添加依赖(最好看官网,因为有时候添加依赖的会有轻微改动,版本也会一直更新) repositorie ...

  5. scala-jdbc-scalike操作jdbc数据库

    1, 引入maven依赖 <!-- 使用 sclaikeJDBC --> <dependency> <groupId>org.scalikejdbc</gro ...

  6. 进程间通信IPC-管道

    管道是UNIX系统IPC的最古老的形式,所有的UNIX系统都提供此通讯机制.管道有以下两种局限性: 1, 历史上,它们是半双工的(即数据只能在一个方向上流动).现在某些系统提供了全双工管道,但是为了最 ...

  7. Log4j 随笔

    对于一个Java开发者而言,Log4j是我们的好朋友了.话说到这里,需要自我检讨一下,这么久以来,凡是用到Log4j的地方,相关的配置文件都是直接拷贝过去,从来都没仔细看过.But thanks Go ...

  8. Asp.net mvc 5 CRUD代码自动生成工具- vs.net 2013 Saffolding功能扩展

    Asp.net mvc 5 CRUD代码自动生成工具 -Visual Studio.net2013 Saffolding功能扩展 上次做过一个<Asp.net webform scaffoldi ...

  9. rtsp信令交互流程

  10. [java]我的数据在哪里?——数据的内存模型

    在编写程序时,我们也许会有这样一个问题,我们编写的程序中的数据运行时,会保存在哪里呢?简单直接的回答可能是——内存.这个回答在多数情况下可能都是对的,但事实上并不准确,我们都知道内存,即随机访问存储器 ...