python学习进阶--2 数字日期和时间

基础的大概懂了,剩下的就是那些比较奇特的,有用的用法,这也是一本火热的进阶书籍上一点一点学的,也有些年头了

# region 3.1 四舍五入数字
# round(value, ndigits)函数返回离它最近的偶数 可以控制位数
round(1.23, 1)
round(1.25361, 3)
# ndigits为负数时 代表在个十百千等位上进行四舍五入
a = 1627731
round(a, -2)   # 1627700
# 输出要求可以使用格式化字符串控制精度
a = 1.65368
print(format(a, "0.2f"))
"value is {:0.3f}".format(a)
# endregion

# region 3.2 精确地浮点运算
# 经常我们的都是会带有小尾巴的
a = 1.2
b = 1.3
c = a + b

# 使用decimal 模块
from decimal import Decimal
a = Decimal('4.2')
b = Decimal('2.1')
a + b
# endregion

# region 3.3 数字的格式化输出
# 使用格式化输出format
x = 123.4567
format(x, "0.2f")
# 上文也讲过小箭头的对齐输出
format(x, "<10.2f")  # 10的宽度进行左对齐保留两位小数输出

# 使用指数计数法
format(x, "e")
format(x, "0.2E")


# endregion

# region 3.4 二八十六进制整数
x = 1234    # 2 8 16进制转换函数
bin(x)
oct(x)
hex(x)
# 也可以使用format的参数b o x
format(a, "b")

# 将其他进制转换为10进制 可以使用int函数
int("101101", 2)
int("bf", 16)
# endregion

# region 3.5 字节数据与整数的转换
# 场景为字节压缩 解压
data = b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004'  # 正式字节数据
len(data)
int.from_bytes(data, byteorder="little")
aa = int.from_bytes(data, byteorder="big")
# 反解码 转换为字节
int.to_bytes(aa,byteorder="big")

# 提前预支内存大小
# int.bit_length() 获得长度
# endregion

# region 3.6 复数运算
# 使用complex(real, imag)函数
a = complex(2, 4)
a.conjugate()  # 共轭
# 所有常见的加减乘除绝对值等依旧适用
b = complex(1, 2)
a + b
a / b
abs(a)

# 如果使用正余弦和平方根等 使用cmath
import cmath
cmath.sin(a)  # 还有很多函数

# 也可以使用numpy构建负数数组 进行大批量运算
import numpy as np
a = np.array(1+2j, 3+4j, 3+1j)
# 然后是一些计算
# 但是Python的标准数学函数确实情况下并不能产生复数值
# endregion

# region 3.7 无穷大和Nan
# 你想创建或测试正无穷、负无穷或NaN(非数字)的浮点数
a = float('inf')
b = float("-inf")
c = float("nan")

# 使用 math测试
cmath.isinf(a)
cmath.isnan(c)

# 无穷大数在执行数学计算的时候会传播
# 但是有些操作时未定义的并会返回一个NaN结果
a/a
a + b
# NaN值会在所有操作中传播,而不会产生异常
# NaN值的一个特别的地方时它们之间的比较操作总是返回False
# endregion

# region 3.8 分数运算
from fractions import Fraction
a = Fraction(5, 4)
b = Fraction(7, 16)
print(a + b)  # 感觉上就是一个自己编写的函数

c = a * b   # 显示分母分子
c.numerator
c.denominator

# endregion

# region 3.9 大型数组计算
# 自己带的数据运算方式不同于普通算数
x = [1, 2, 3, 4]
y = [2, 3, 4, 5]
# x * y是不允许的
# x * 2 是扩充长度

import numpy as np
ax = np.array([1, 2, 3, 4])
ay = np.array([5, 6, 7, 8])
ax * 2
ax + 10
ax * ay
# 以上操作显示正常

# 另一个优点 可以对整个数组每个进行函数求解 方便快速
def dd(x):
    return 2 * x ** 2 + 3 * x + 4

np.sqrt(ax)
dd(ax)

# NumPy 还为数组操作提供了大量的通用函数
# np.sin()  np.cos() np.abs()

grid = np.ones(shape=(100, 100), dtype=int)
# 创造大数组 并进行运算
# endregion

# region 3.10 矩阵与线性代数运算
# 求解矩阵 行列式等 numpy中有这样的库
import numpy as np
m = np.matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 其中包含了许多函数
# 内容很多 具体操作需要访问官网获得
# http://www.numpy.org
# endregion

# region 3.11 随机选择
import random
values = [1, 2, 3, 4, 5]

# 要想从一个序列中随机的抽取一个元素
random.choice(values)

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

# 打乱顺序
random.shuffle(values)

# 随机整数
random.randint(0, 10)

# endregion

# region 3.12 基本的日期与时间转换
from datetime import timedelta
a = timedelta(days=2, hours=6)
b = timedelta(hours=4.5)
x = a + b
x.days
x.seconds
x.seconds / 3600
c.total_second() / 3600

# 指定日期和时间
from datetime import datetime
a = datetime(2012, 9, 23)
b = datetime(2012, 12, 21)
d = b - a

now = datetime.today()
print(now)
print(now + timedelta(minutes=10))
# endregion

# region 3.13 获取最近的星期几的日期
from datetime import datetime, timedelta
days = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday']
def find_previous_day(day, start_day = None):
    if start_day is None:
        start_day = datetime.today()

    num = start_day.weekday()  # 0-6数值
    target = days.index(day)
    chazhi = (num - target)
    if chazhi == 0:
        chazhi = 7
    return start_day + timedelta(days=chazhi)  # timedelta时间可以为负数

find_previous_day( 'Wednesday')

# endregion

# region 3.15 日期与字符串转换
from datetime import datetime
text = '2012-09-20'
y =datetime.strptime(text, "%Y-%m-%d")

# 当然也可以时间转字符串
y = datetime.now()
datetime.strftime(y, '%A %B %d, %Y')

# endregion

# region 3.16 结合时区的日期操作
from datetime import datetime
from pytz import timezone
d = datetime(2012, 12, 21, 9, 30, 0)      # 定义时间
print(d)
newlocal = timezone('US/Central')          # 定义时区
newd = newlocal.localize(d)               # 生成新的时区时间
print(newd)


# 假设意夏令时转换和其他细节 在2013年,美国标准夏令时时间开始于本地时间3月13日凌晨2:00(在那时,时间向前跳过一小时)。
# 如果你正在执行本地计算,你会得到一个错误

d = datetime(2013, 3, 10, 1, 45)
loc_d = newlocal.localize(d)  # 规划时区
print(loc_d)                                                      # 2013-03-10 01:45:00-06:00
later = loc_d + timedelta(minutes=30)  # 增加时间
print(later)                                                      # 2013-03-10 02:15:00-06:00 这是不好用的


# 上述输出,没有用 需要使用时区对象方法
later = newlocal.normalize(loc_d + timedelta(minutes=30))
print(later)                                                      # 2013-03-10 03:15:00-05:00
# endregion
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值