PythonCookBook笔记——数字日期和时间
数字日期和时间
数字的四舍五入
用round函数,指定值和小数位数。
>>> round(1.23, 1)
1.2
>>> round(1.27, 1)
1.3
>>> round(-1.27, 1)
-1.3
>>> round(1.25361,3)
1.254
精确的浮点数运算
>>> a = 4.2
>>> b = 2.1
>>> a + b
6.300000000000001
>>> (a + b) == 6.3
False
>>> 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
数字的格式化输出
>>> x = 1234.56789
>>> # Two decimal places of accuracy
>>> format(x, '0.2f')
'1234.57'
>>> # Right justified in 10 chars, one-digit accuracy
>>> format(x, '>10.1f')
' 1234.6'
>>> # Left justified
>>> format(x, '<10.1f')
'1234.6 '
>>> # Centered
>>> format(x, '^10.1f')
' 1234.6 '
>>> # Inclusion of thousands separator
>>> format(x, ',')
'1,234.56789'
>>> format(x, '0,.1f')
'1,234.6'
二八十六进制整数
有时需要将整数转为二进制、八进制、十六进制的文本串。
>>> x = 1234
>>> bin(x)
'0b10011010010'
>>> oct(x)
'0o2322'
>>> hex(x)
'0x4d2'
>>> format(x, 'b')
'10011010010'
>>> format(x, 'o')
'2322'
>>> format(x, 'x')
'4d2'
>>> int('4d2', 16)
1234
>>> int('10011010010', 2)
1234
分数运算
>>> from fractions import Fraction
>>> a = Fraction(5, 4)
>>> b = Fraction(7, 16)
>>> print(a + b)
27/16
>>> print(a * b)
35/64
>>> # Getting numerator/denominator
>>> c = a * b
>>> c.numerator
35
>>> c.denominator
64
>>> # Converting to a float
>>> float(c)
0.546875
>>> # Limiting the denominator of a value
>>> print(c.limit_denominator(8))
4/7
>>> # Converting a float to a fraction
>>> x = 3.75
>>> y = Fraction(*x.as_integer_ratio())
>>> y
Fraction(15, 4)
随机选择
利用内置的random模块可以生成随机数或做随机选择。
random.choice(seq)可以从序列中随机抽取一个元素。
random.sample(seq, num)可以从指定序列中抽取指定个数的元素。
random.shuffle(seq)用于将有序序列打乱。
random.randint(start, end)用于从指定范围内生成随机整数。
random.random()不需参数,生成0-1之间的随机浮点数。
要注意的是,random模块使用Mersenne Twister算法来计算生成随机数,这是确定性算法,但可以通过random.seed()来修改初始化种子(默认以系统时间或系统提供的随机数)。
并且,random的函数不应该用于密码学应用,如加密。
基本的日期与时间转换
使用datetime模块。
timedelta()用于生成时间段(表示几年、几天、几小时),并且支持算术运算。
datetime()生成指定日期,也支持算术运算,可与timedelta()的值进行运算,并且该函数会自动考虑润年。
字符串转换为日期
有时需要将字符串格式日期转换为datetime对象以便进行运算,同样使用datetime模块。
strptime()接收字符串和一个匹配规则,返回一个datetime对象。
>>> from datetime import datetime
>>> text = '2012-09-20'
>>> y = datetime.strptime(text, '%Y-%m-%d')
>>> z = datetime.now()
>>> diff = z - y
>>> diff
datetime.timedelta(3, 77824, 177393)
>>>
必须注意的是,该方法性能极差,如果涉及到大量已知格式的日期转换,最好自己解析出对应日期并手动构建datetime对象。
PythonCookBook笔记——数字日期和时间的更多相关文章
- Python3-Cookbook总结 - 第三章:数字日期和时间
第三章:数字日期和时间 在Python中执行整数和浮点数的数学运算时很简单的. 尽管如此,如果你需要执行分数.数组或者是日期和时间的运算的话,就得做更多的工作了. 本章集中讨论的就是这些主题. Con ...
- python3: 数字日期和时间(1)
---恢复内容开始--- 1. 数字的四舍五入 Q: 你想对浮点数执行指定精度的舍入运算 A: 简单的使用内置的round(value, ndigits)函数即可. >>> roun ...
- python3: 数字日期和时间(2)
12.基本的日期与时间转换 Q: 你需要执行简单的时间转换,比如天到秒,小时到分钟等的转换 A: 为了执行不同时间单位的转换和计算,请使用 datetime 模块. 比如,为了表示一个时间段,可以创建 ...
- python3-cookbook笔记:第三章 数字日期和时间
python3-cookbook中每个小节以问题.解决方案和讨论三个部分探讨了Python3在某类问题中的最优解决方式,或者说是探讨Python3本身的数据结构.函数.类等特性在某类问题上如何更好地使 ...
- Java学习笔记【七、时间、日期、数字】
参考:http://www.runoob.com/java/java-date-time.html Date类 构造: Date() 使用当前的日期时间 Date(long millisec) 197 ...
- 《Javascript权威指南》13号学习笔记:使用日期和时间
一.创Date示例 1.Date类的方法和属性是非常不静,故,申请书Date属性和方法之前.必须创建Date类的实例. var date = new Date(); //以当前日期和时间创建实例. ...
- MySQL 笔记 —— 日期和时间函数
[TOC] 获取当前日期的函数和获取当前时间的函数 CURDATE()和CURRENT_DATE()函数获取当前日期:CURTIME()和CURRENT_TIME()函数获取当前时间. mysql&g ...
- mysql学习1:数据类型:数字型,日期和时间,字符串类型(总结)
mysql数据类型:数字型,日期和时间,字符串类型 摘要 MySQL中定义数据字段的类型对数据库的优化是非常重要的: MySQL支持多种类型,大致可以分为三类,如下. 数字类型 整数:tinyint. ...
- JAVA中String.format的用法 格式化字符串,格式化数字,日期时间格式化,
1.对整数进行格式化:%[index$][标识][最小宽度]转换方式 我们可以看到,格式化字符串由4部分组成,其中%[index$]的含义我们上面已经讲过,[最小宽度]的含义也很好理解, ...
随机推荐
- 归并排序,时间复杂度nlogn
思路: /* 考点: 1. 快慢指针:2. 归并排序. 此题经典,需要消化吸收. 复杂度分析: T(n) 拆分 n/2, 归并 n/2 ...
- touch event 存疑
1.原声js与借用jquery输出来的事件列表却不一样 function touchPlay(e) { e.preventDefault(); console.log(e); } var screen ...
- SPOJ QTREE4 - Query on a tree IV
You are given a tree (an acyclic undirected connected graph) with N nodes, and nodes numbered 1,2,3. ...
- 【NOIP2015】子串(字符串DP)
题意:有AB两个字符串,用A中连续的K串匹配B全串,问不同的方案总数 n<=1000,m<=200,k<=m 思路:设dp[k,i,j]为用k串 A中前i个字符匹配B中前j个字符的方 ...
- vue2.0组件入门
如何定义一个组件 在根目录src/components/文件夹下新建组件的文件夹Footer.vue组件 在Footer.vue中 <template> <div class=&qu ...
- elementary os 0.4.1下编译GCC-7.1源码并安装成功
参考文章:http://www.2cto.com/os/201402/281131.html 前几天为了图个新鲜,安装了elementary os 0.4.1,的确是一股清流,可惜的是gcc版本觉得有 ...
- 47深入理解C指针之---指针与硬件
一.size_t:用于安全表示长度,所有平台和系统都会解析成自己对应的长度 1.定义:size_t类型表示C中任何对象所能表示的最大长度,是个无符号整数:常常定义在stdio.h或stdlib.h中 ...
- AC日记——狼抓兔子 bzoj 1001
Description 现在小朋友们最喜欢的"喜羊羊与灰太狼",话说灰太狼抓羊不到,但抓兔子还是比较在行的, 而且现在的兔子还比较笨,它们只有两个窝,现在你做为狼王,面对下面这样一 ...
- webstrom配置一键修复ESLint的报错
因为项目本身有用eslint,而我这边没用,我这边提交上去别人update后就会提示很多eslint的格式错误提示,所以就在该项目里使用了eslint. 发现一般有两种安装方式,我使用的是webstr ...
- CDOJ 879 摩天轮 dp+斜率优化
原题链接:http://www.acm.uestc.edu.cn/#/problem/show/879 题意: 中文题 题解: 这是一道斜率dp的题. 先把$a$数组排个序. 令$dp[i][j]$表 ...