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. css:html-font-size

    font-family:"Helvetica Neue",Helvetica,Arial,sans-serif

  2. session学习总结【session原理、应用、与cookie区别】

    session原理 session也是一种记录浏览器状态的机制,但与cookie不同的是,session是保存在服务器中. 由于http是无状态协议,当服务器存储了多个用户的session数据时,如何 ...

  3. 洛谷P3177 [HAOI2015]树上染色(树形dp)

    题目描述 有一棵点数为 N 的树,树边有边权.给你一个在 0~ N 之内的正整数 K ,你要在这棵树中选择 K个点,将其染成黑色,并将其他 的N-K个点染成白色 . 将所有点染色后,你会获得黑点两两之 ...

  4. 带大家用40行python代码实现一个疫情地图

    最近两个月,因为新冠病毒无情的肆虐,相信会给每个中国人的记忆中画上重重的一笔.到今天为止,疫情形势依然十分严峻,虽然除湖北外的其他省份已经连续十一天确诊人数下降,但是接下来还有将近至少1.6亿的人口迁 ...

  5. BZOJ 2434 阿狸的打字机(ac自动机+dfs序+树状数组)

    题意 给你一些串,还有一些询问 问你第x个串在第y个串中出现了多少次 思路 对这些串建ac自动机 根据fail树的性质:若x节点是trie中root到t任意一个节点的fail树的祖先,那么x一定是y的 ...

  6. helm 错误the server has asked for the client to provide credentials

    一.造成错误的原因 不小心把helm的RBAC权限文件删除了.虽然重新apply了RBAC配置,但是已经无法使用helm install了. 二.解决方法 把运行的tiller的pod干掉,让他自动重 ...

  7. [MacOS-Memcached]安装

    查看memcached信息 $ brew info memcached memcached: stable 1.5.22 (bottled), HEAD High performance, distr ...

  8. 用msi安装MySQL时MySQL Server组件不能安装,或安装失败

    我的环境:       MySQL8.0.15,       win10 错误描述:在安装MySQL时,如果MySQL Server组件提示不能安装,错误提示是:VS 2015没有安装或安装失败.原因 ...

  9. jquery带下拉列表的购物车组件封装

    按照国际惯例先放效果图 安静的时候它长这样 等待加载时它长这样(功能是设置的按需加载,网速慢或者加载数据大时会出现) 加载之后购物车没有商品时这样 有商品长这样 接下来放代码: cart.html & ...

  10. HA: Chanakya Vulnhub Walkthrough

    靶机链接: https://www.vulnhub.com/entry/ha-chanakya,395/ 网络主机探测: 主机端口扫描: nmap -p- -sC -sV 10.10.202.136 ...