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))