python3-cookbook笔记:第三章 数字日期和时间
python3-cookbook中每个小节以问题、解决方案和讨论三个部分探讨了Python3在某类问题中的最优解决方式,或者说是探讨Python3本身的数据结构、函数、类等特性在某类问题上如何更好地使用。这本书对于加深Python3的理解和提升Python编程能力的都有显著帮助,特别是对怎么提高Python程序的性能会有很好的帮助,如果有时间的话强烈建议看一下。
本文为学习笔记,文中的内容只是根据自己的工作需要和平时使用写了书中的部分内容,并且文中的示例代码大多直接贴的原文代码,当然,代码多数都在Python3.6的环境上都验证过了的。不同领域的编程关注点也会有所不同,有兴趣的可以去看全文。
python3-cookbook:https://python3-cookbook.readthedocs.io/zh_CN/latest/index.html
3.2 执行精确的浮点数运算
Python的浮点数计算是存在误差的,但是在大多数领域这种误差是被允许的,并且在性能上也是最快的,但是如果你的程序需要提供非常精确的计算,并且可以容忍一定的性能损耗,比如金融领域的计算,那么可以使用Decimal模块,需要注意的是,Decimal模块需要用字符串的形式表示数字。
另外提一下,如果是进行舍入运算或其他计算操作,可以考虑使用内置函数round或者math模块中的方法。
>>> a = 4.2
>>> b = 2.1
>>> a + b
6.300000000000001
>>> (a + b) == 6.3
False
>>> (a + b) > 6.3
True
>>>
>>> from decimal import Decimal
>>> a = Decimal('4.2')
>>> b = Decimal('2.1')
>>> a + b
Decimal('6.3')
>>> print(a + b)
6.3
>>> (a + b) == Decimal('6.3')
True
>>>
>>> # decimal的舍入运算
>>> from decimal import localcontext
>>> a = Decimal(1.3)
>>> a
Decimal('1.3000000000000000444089209850062616169452667236328125')
>>> a = Decimal('1.3')
>>> a
Decimal('1.3')
>>> b = Decimal('1.7')
>>> print(a / b)
0.7647058823529411764705882353
>>> with localcontext() as ctx:
ctx.prec = 3
print(a / b) 0.765
>>>
3.3 数字的格式化输出
数字的格式化操作,包括浮点数和Decimal数字对象,可以使用内置的format函数或字符串的format方法,指定宽度和精度的一般形式为[<>^]?width[,]?(.digits)?,?表示它前面的部分是可选的,<>^为对齐方式,width为宽度,逗号为千位符,.digits为精度。
>>> x = 1234.56789
>>> format(x, '0.2f')
'1234.57'
>>> format(x, '>10.1f')
' 1234.6'
>>> format(x, '<10.1f')
'1234.6 '
>>> format(x, '^10.1f')
' 1234.6 '
>>> format(x, ',')
'1,234.56789'
>>> format(x, '0,.1f')
'1,234.6'
>>> format(x, 'e')
'1.234568e+03'
>>> format(x, '0.2E')
'1.23E+03'
>>> 'The value is {:0,.2f}'.format(x)
'The value is 1,234.57'
>>>
3.4 二八十六进制整数
如果想要将整数转换为二进制、八进制或十六进制的数字字符串,使用内置的bin()、oct()或hex()函数即可,或者使用format函数进行转换,当然,反过来,想要将对应进制的数转换为十进制的整数,直接使用int()即可。
>>> x = 1234
>>> # 带有对应进制表示前缀:0b,0o,0x
>>> bin(x)
'0b10011010010'
>>> oct(x)
'0o2322'
>>> hex(x)
'0x4d2'
>>> # 没有对应进制表示前缀:0b,0o,0x
>>> format(x, 'b')
''
>>> format(x, 'o')
''
>>> format(x, 'x')
'4d2'
>>> # 转换为十进制
>>> int('4d2', 16)
1234
>>> int('', 2)
1234
>>> int('', 8)
1234
>>>
3.5 字节到大整数的打包与解包
字节字符串到整数之间的转换并不常用,但是遇到了,也可以考虑这种解决方案,即使用int.from_bytes()方法和int.to_bytes()方法。
>>> data = b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004'
>>> int.from_bytes(data, 'little')
69120565665751139577663547927094891008
>>> int.from_bytes(data, 'big')
94522842520747284487117727783387188
>>> x = 94522842520747284487117727783387188
>>> x.bit_length() / 8
14.625
>>> x.to_bytes(15, 'little')
b'4\x00#\x00\x01\xef\xcd\x00\xab\x90x\x00V4\x12'
>>> x.to_bytes(15, 'big')
b'\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004'
>>>
3.15 字符串转换为日期
将字符串转为日期,可以使用datetime中的strptime()方法,但是专门记下这小节,是因为文中说这个方法是用纯Python实现,并且效率并不是很好,如果是已知字符串的格式,推荐自己写一套解析转换的代码,我在平时的使用中也是有这种体验,特别是转换次数多了后感受就特别明显。
>>> from datetime import datetime
>>> text = '2012-09-20'
>>> datetime.strptime(text, '%Y-%m-%d')
datetime.datetime(2012, 9, 20, 0, 0)
>>>
python3-cookbook笔记:第三章 数字日期和时间的更多相关文章
- Python3-Cookbook总结 - 第三章:数字日期和时间
第三章:数字日期和时间 在Python中执行整数和浮点数的数学运算时很简单的. 尽管如此,如果你需要执行分数.数组或者是日期和时间的运算的话,就得做更多的工作了. 本章集中讨论的就是这些主题. Con ...
- Android群英传笔记——第三章:Android控件架构与自定义控件讲解
Android群英传笔记--第三章:Android控件架构与自定义控件讲解 真的很久没有更新博客了,三四天了吧,搬家干嘛的,心累,事件又很紧,抽时间把第三章大致的看完了,当然,我还是有一点View的基 ...
- 《DOM Scripting》学习笔记-——第三章 DOM
<Dom Scripting>学习笔记 第三章 DOM 本章内容: 1.节点的概念. 2.四个DOM方法:getElementById, getElementsByTagName, get ...
- 《Linux内核设计与分析》第六周读书笔记——第三章
<Linux内核设计与实现>第六周读书笔记——第三章 20135301张忻估算学习时间:共2.5小时读书:2.0代码:0作业:0博客:0.5实际学习时间:共3.0小时读书:2.0代码:0作 ...
- spring boot 笔记--第三章
spring boot 笔记 第三章,使用Spring boot 构建系统: 强烈建议支持依赖管理的构建系统,Maven或Gradle 依赖管理: Spring Boot的每版本都会提供它支持的依赖列 ...
- The Road to learn React书籍学习笔记(第三章)
The Road to learn React书籍学习笔记(第三章) 代码详情 声明周期方法 通过之前的学习,可以了解到ES6 类组件中的生命周期方法 constructor() 和 render() ...
- [HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设
[HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设 敲黑板!! <q>元素添加短引用,<blockquote>添加长引用 在段落里添加引用就使用< ...
- JVM学习笔记-第三章-垃圾收集器与内存分配策略
JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...
- PythonCookBook笔记——数字日期和时间
数字日期和时间 数字的四舍五入 用round函数,指定值和小数位数. >>> round(1.23, 1) 1.2 >>> round(1.27, 1) 1.3 & ...
随机推荐
- css- :before :after
:before和:after的作用就是在指定的元素内容(而不是元素本身)之前或者之后插入一个包含content属性指定内容的行内元素,最基本的用法如下: #example:before { conte ...
- CCF_201604-2_俄罗斯方块
用一个4*2的数组记录方块的位置,每一次移动前判断每个方块位置下面是否已有方块,直到不能移动,将该数组更新到原来的图上,输出即可. #include<cstdio> #include< ...
- Python爬虫小结
有些数据是没有专门的数据集的,为了找到神经网络训练的数据,自然而然的想到了用爬虫的方法开始采集数据.一开始采用了网上的一个动态爬虫的代码,发现爬取的图片大多是重复的,有效图片很少. 动态爬虫: fro ...
- 微信小程序开发技巧总结 (一)-- 数据传递和存储
结合自己在平时的开发中遇到的各种问题,和浏览各种问题的解决方案总结出一些自己在日常开发中常用的技巧和知点,希望各位不吝斧正. 1.短生命周期数据存储 以小程序启动到彻底关闭为周期的的数据建议存储在ap ...
- 题解 SP1716 【GSS3 - Can you answer these queries III】
\[ Preface \] 没有 Preface. \[ Description \] 维护一个长度为 \(n\) 的数列 \(A\) ,需要支持以下操作: 0 x y 将 \(A_x\) 改为 \( ...
- pytorch之 compare with numpy
import torch import numpy as np # details about math operation in torch can be found in: http://pyto ...
- href的几个特殊值
a href ="" :默认打开的还是当前页面,会刷新一下重新打开. a href ="#": 浏览器地址栏网址后面会多显示1个#.不会刷新页面,会回到页面顶部 ...
- Java 中常见排序算法
经典的排序算法总结 冒泡排序算法 算法描述: 比较相邻的元素:如果第一个比第二个大,就交换它们两个: 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数: 针 ...
- 小白的linux笔记1:CentOS 8 安装与设置
为了在服务器上跑爬虫,以及学SegNet,研究了一圈看来linux是必学品了.在自己电脑上安装了一个 1.官网下载iso,一个linux dvd是稳定版,选之,另一个stream版是更新更快的测试版, ...
- PHP0024:PHP 博客项目开发