Python3-Cookbook-Study Notes chap3:数字日期和时间

1.数字的四舍五入 —— round(value, ndigits)

2.执行精确的浮点数运算

# 想更加精确(并能容忍一定的性能损耗) ——  decimal 模块
from decimal import Decimal
# decimal 模块的一个主要特征是允许你控制计算的每一方面,包括数字位数和四舍五入运算
a = Decimal('4.2')
b = Decimal('2.1')

3.数字的格式化输出

# 格式化输出单个数字的时候,可以使用内置的 format() 函数
x = 1234.56789

# Two decimal places of accuracy
format(x, '0.2f')

# Right justified in 10 chars, one-digit accuracy
format(x, '>10.1f')

# Left justified
format(x, '<10.1f')

# Centered
format(x, '^10.1f')

# Inclusion of thousands separator
format(x, ',')
format(x, '0,.1f')

# 使用指数记法,将f改成e或者E(取决于指数输出的大小写形式)
format(x, 'e')

4.二八十六进制整数 —— 分别使用 bin() , oct() 或 hex()

# 不想输出 0b , 0o 或者 0x 的前缀的话,可以使用 format() 函数
format(x, 'b')

5.字节到大整数的打包与解包

# 假如需要处理一个拥有128位长的16个元素的字节字符串
data = b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004'

# 将bytes解析为整数,使用 int.from_bytes() 方法
int.from_bytes(data, 'little')
int.from_bytes(data, 'big')

# 将一个大整数转换为一个字节字符串,使用 int.to_bytes() 方法
x = 94522842520747284487117727783387188
x.to_bytes(16, 'big')
x.to_bytes(16, 'little')

6.复数的数学运算 —— cmath 模块

a = complex(2, 4)
a.real
a.imag
a.conjugate()  # 共轭

import cmath
cmath.sin(a)

7.无穷大与NaN —— 使用 float() 来创建

# 使用 math.isinf() 和 math.isnan() 函数测试
float('inf')
float('nan')

import numpy as np
np.nan

# NaN值的一个特别的地方时它们之间的比较操作总是返回False

8.分数运算 —— fractions 模块

from fractions import Fraction
a = Fraction(5, 4)

# Getting numerator/denominator
c = a * b
c.numerator
c.denominator

# Converting to a float
float(c)

# Converting a float to a fraction
y = Fraction(*x.as_integer_ratio())

9.大型数组运算 —— NumPy 库

10.矩阵与线性代数运算 —— NumPy 库

# numpy.linalg 
import numpy.linalg

# Determinant
numpy.linalg.det(m)

# Eigenvalues
numpy.linalg.eigvals(m)

# Solve for x in mx = v
x = numpy.linalg.solve(m, v)

11.随机选择 —— random 模块

# 从一个序列中随机的抽取一个元素,可以使用 random.choice()

import random
values = [1, 2, 3, 4, 5, 6]
random.choice(values)

# 提取N个不同元素的样本使用 random.sample()
random.sample(values, 2)

# 仅仅只是想打乱序列中元素的顺序,使用 random.shuffle()
random.shuffle(values)

# 生成随机整数,使用 random.randint()
random.randint(0,10)

# 生成0到1范围内均匀分布的浮点数,使用 random.random()
random.random()

# 获取N位随机位(二进制)的整数,使用 random.getrandbits()
random.getrandbits(200)

# 通过 random.seed() 函数修改初始化种子
random.seed() # Seed based on system time or os.urandom()
random.seed(12345) # Seed based on integer given
random.seed(b'bytedata') # Seed based on byte data

# random.uniform() 计算均匀分布随机数
# random.gauss() 计算正态分布随机数

12.基本的日期与时间转换 —— datetime 模块

from datetime import timedelta
# datetime 会自动处理闰年
a = timedelta(days=2, hours=6)
b = timedelta(hours=4.5)
c = a + b
c.days
c.seconds
c.seconds / 3600
c.total_seconds() / 3600

# dateutil.relativedelta() 函数
from dateutil.relativedelta import relativedelta
a + relativedelta(months=+1)
b = datetime(2012, 12, 21)
d = b - a

13.计算上一个周五的日期

#!/usr/bin/env python
# -*- encoding: utf-8 -*-
"""
Topic: 最后的周五
Desc :
"""
from datetime import datetime, timedelta


weekdays = ['Monday', 'Tuesday', 'Wednesday', 'Thursday',
            'Friday', 'Saturday', 'Sunday']


def get_previous_byday(dayname, start_date=None):
    if start_date is None:
        start_date = datetime.today()
    day_num = start_date.weekday()
    day_num_target = weekdays.index(dayname)
    days_ago = (7 + day_num - day_num_target) % 7
    if days_ago == 0:
        days_ago = 7
    target_date = start_date - timedelta(days=days_ago)
    return target_date

get_previous_byday('Sunday', datetime(2012, 12, 21))

from datetime import datetime
from dateutil.relativedelta import relativedelta
from dateutil.rrule import *

d = datetime.now()
# Next Friday
print(d + relativedelta(weekday=FR))
# Last Friday
print(d + relativedelta(weekday=FR(-1)))

14.计算当前月份的日期范围

from datetime import datetime, date, timedelta
import calendar

def get_month_range(start_date=None):
    if start_date is None:
        start_date = date.today().replace(day=1)
    _, days_in_month = calendar.monthrange(start_date.year, start_date.month)
    end_date = start_date + timedelta(days=days_in_month)
    return (start_date, end_date)

# calendar.monthrange() 函数来找出该月的总天数

15.字符串转换为日期

from datetime import datetime
text = '2012-09-20'
y = datetime.strptime(text, '%Y-%m-%d')

16.结合时区的日期操作 —— pytz 模块

from datetime import datetime
from pytz import timezone
d = datetime(2012, 12, 21, 9, 30, 0)

# Localize the date for Chicago
central = timezone('US/Central')
loc_d = central.localize(d)

# Convert to Bangalore time
bang_d = loc_d.astimezone(timezone('Asia/Kolkata'))

from datetime import timedelta
later = central.normalize(loc_d + timedelta(minutes=30))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值