python cookbook阅读之——3.数字、日期和时间

3.1 对数字进行取整

将一个浮点点数取整到固定的小数位   round(value, ndigits) 函数  format(value, ndigits)

>>> round(-1.123456, 3)
-1.123
>>> round(1.123456, 2)
1.12
>>> A = 1.123456
>>> format(A, '0.2f')
'1.12'
>>> B = -1.123456
>>> format(B, '0.3f')
'-1.123'

3.2 执行精确的小数计算,直接加浮点数会有微小的误差 , 为了得到更高精度(并愿意为此牺牲掉一些性能),可以使用Decimal 模块

>>> 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')
>>> (a+b)==Decimal('6.3')
True

3.3 对数值做出格式化输出,使用内建format()函数

>>> A = 15.123456
>>> format(A, '>10.2f')
'     15.12'
>>> format(A, '<10.2f')
'15.12     '
>>> format(A, '^10.2f')
'  15.12   '

3.4 随机选择,使用random.choice(), 随机取样多个random.sample(), 只打乱顺序random.shuffle(), 随机整数random.randint(), 随机0到1之间浮点数random.randdom(), 计算均匀分布值random.uniform(), 计算正态分布值random.gauss()

>>> import random
>>> values = [1,4,6,8,9]
>>> random.choice(values)
6
>>> random.sample(values, 2)
[6, 8]
>>> random.shuffle(values)
>>> values
[9, 8, 6, 4, 1]
>>> random.shuffle(values)
>>> values
[6, 1, 8, 9, 4]
>>> random.randint(1,5)
5
>>> random.random()
0.7871444120013806

3.4 时间换算

使用datetime模块来完成不同的时间单位间的换算

>>> from datetime import timedelta
>>> a = timedelta(days=2, hours=6)
>>> print a
2 days, 6:00:00
>>> b= timedelta(hours = 4.5)
>>> print b
4:30:00
>>> c = a + b
>>> c
datetime.timedelta(2, 37800)
>>> c.days
2
>>> c.seconds
37800
>>> c.seconds / 3600
10
>>> c.seconds / 3600.0
10.5

如果需要执行大量类似的日期计算,最好安装python-deteutil包,使用deteutil模块中的relativedelta()执行计算。(例如:可以快速计算出上周星期五是几月几号等)

将字符串转换为日期可以使用strptime()实现,支持多种格式化代码,但是strptime()性能糟糕,因为该函数使用纯python代码实现的,而且要处理各种各样的系统区域设定。有大量日期数据处理的情况下不建议使用

>>> from datetime import datetime
>>> text = "2012-09-20"
>>> y = datetime.strptime(text, '%Y-%m-%d')
>>> y
datetime.datetime(2012, 9, 20, 0, 0)
>>> z = datetime.now()
>>> z
datetime.datetime(2019, 8, 5, 20, 9, 40, 442782)
>>> diff = z - y
>>> diff
datetime.timedelta(2510, 72580, 442782)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值