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笔记:第三章 数字日期和时间的更多相关文章

  1. Python3-Cookbook总结 - 第三章:数字日期和时间

    第三章:数字日期和时间 在Python中执行整数和浮点数的数学运算时很简单的. 尽管如此,如果你需要执行分数.数组或者是日期和时间的运算的话,就得做更多的工作了. 本章集中讨论的就是这些主题. Con ...

  2. Android群英传笔记——第三章:Android控件架构与自定义控件讲解

    Android群英传笔记--第三章:Android控件架构与自定义控件讲解 真的很久没有更新博客了,三四天了吧,搬家干嘛的,心累,事件又很紧,抽时间把第三章大致的看完了,当然,我还是有一点View的基 ...

  3. 《DOM Scripting》学习笔记-——第三章 DOM

    <Dom Scripting>学习笔记 第三章 DOM 本章内容: 1.节点的概念. 2.四个DOM方法:getElementById, getElementsByTagName, get ...

  4. 《Linux内核设计与分析》第六周读书笔记——第三章

    <Linux内核设计与实现>第六周读书笔记——第三章 20135301张忻估算学习时间:共2.5小时读书:2.0代码:0作业:0博客:0.5实际学习时间:共3.0小时读书:2.0代码:0作 ...

  5. spring boot 笔记--第三章

    spring boot 笔记 第三章,使用Spring boot 构建系统: 强烈建议支持依赖管理的构建系统,Maven或Gradle 依赖管理: Spring Boot的每版本都会提供它支持的依赖列 ...

  6. The Road to learn React书籍学习笔记(第三章)

    The Road to learn React书籍学习笔记(第三章) 代码详情 声明周期方法 通过之前的学习,可以了解到ES6 类组件中的生命周期方法 constructor() 和 render() ...

  7. [HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设

    [HeadFrist-HTMLCSS学习笔记]第三章构建模块:Web页面建设 敲黑板!! <q>元素添加短引用,<blockquote>添加长引用 在段落里添加引用就使用< ...

  8. JVM学习笔记-第三章-垃圾收集器与内存分配策略

    JVM学习笔记-第三章-垃圾收集器与内存分配策略 tips:对于3.4之前的章节可见博客:https://blog.csdn.net/sanhewuyang/article/details/95380 ...

  9. PythonCookBook笔记——数字日期和时间

    数字日期和时间 数字的四舍五入 用round函数,指定值和小数位数. >>> round(1.23, 1) 1.2 >>> round(1.27, 1) 1.3 & ...

随机推荐

  1. SpringBoot项目版本升级:从1.5.3升级到2.1.8版本

    SpringBoot项目版本升级:从1.5.3升级到2.1.8版本 前言 简单记录一次本人在自己的SpringBoot项目project-template中,把1.5.3版本升级到2.1.8版本时升级 ...

  2. Codeforces Round #470 (Div. 2) A Protect Sheep (基础)输入输出的警示、边界处理

    Bob is a farmer. He has a large pasture with many sheep. Recently, he has lost some of them due to w ...

  3. Virus:病毒查杀

    简介 小伙伴们,大家好,今天分享一次Linux系统杀毒的经历,还有个人的一些总结,希望对大家有用. 这次遇到的是一个挖矿的病毒,在挖一种叫门罗币(XMR)的数字货币,行情走势请看 https://ww ...

  4. 【题解】P3373 【模板】线段树 2

    线段树解法 好丢脸,这个题做了一下午,调试了三个多小时...... 先讲讲解题思路 既然这里是线段树,就要用到lazy-tag.又有加法又有乘法的话,就要用到两个lazy-tag,分别用数组jia[] ...

  5. 手机控制电脑第二弹之HIPC

    点击蓝字关注我们 是否很多时候电脑不在身边,又急需要使用,比如正好要用一个文件,又没有放在我们的网盘中,想用手机查看电脑状态,但是很多太复杂的方式不会使用,需要简单的方式,今天方成分享给你 前言 故事 ...

  6. 入侵检测基本准则(Basic principles of intrusion detection)【v1.0】

    所谓“入侵检测”,顾名思义,就是对入侵行为的发觉.他通过对计算机网络或计算机系统中若干关键点收集信息并对其进行分析,从中发现网络或系统中是否有违反安全策略的行为和被攻击的迹象.” 但实际上,所谓的“违 ...

  7. light oj1170 - Counting Perfect BST卡特兰数

    1170 - Counting Perfect BST BST is the acronym for Binary Search Tree. A BST is a tree data structur ...

  8. Day5前端学习之路——盒模型和浮动

    盒子模型 浮动float 一.盒子模型 (1)content内容区 width和height是框内容显示的区域——包括框内的文本内容,以及表示嵌套子元素的其他框,也可以使用min-width.max- ...

  9. webpack--介绍、安装及入门

    最早的时候,所有Javascript代码都写在一个文件里面,只要加载这一个文件就够了.后来,代码越来越多,一个文件不够了,必须分成多个文件,依次加载.下面的网页代码,相信很多人都见过. <scr ...

  10. [WPF 自定义控件]自定义一个“传统”的 Validation.ErrorTemplate

    1. 什么是Validaion.ErrorTemplate 数据绑定模型允许您将与您Binding的对象相关联ValidationRules. 如果用户输入的值无效,你可能希望在应用程序 用户界面 ( ...