python cookbook 3 数字 日期 时间(2)

5.字节到大整数的转换python

#拥有128位长的16个元素的字节字符串。
>>> data = b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004'
>>> len(data)
16
将bytes解析为整数,使用 int.from_bytes() 方法
#仅使用与python3
#字节顺序规则(little或big)仅仅指定了构建整数时的字节的低位高位排列方式。
>>> int.from_bytes(data, 'little')
69120565665751139577663547927094891008
>>> int.from_bytes(data, 'big')
94522842520747284487117727783387188
>>> 
将一个大整数转换为一个字节字符串,使用 int.to_bytes() 方法,并像下面这样指定字节数和字节顺序:
>>> x=94522842520747284487117727783387188
>>> x.to_bytes(16,'big')
b'\x00\x124V\x00x\x90\xab\x00\xcd\xef\x01\x00#\x004'
>>> x.to_bytes(16,'little')
b'4\x00#\x00\x01\xef\xcd\x00\xab\x90x\x00V4\x12\x00'
>>> 
使用 int.bit_length() 方法来决定须要多少字节位来存储这个值
>>> x=94522842520747284487117727783387188
>>> x.bit_length()
117

6.复数的数学运算安全

复数能够用使用函数 complex(real, imag) 或者是带有后缀j的浮点数来指定dom

>>> a = complex(2, 4)
>>> b= 3-5j
>>> a
(2+4j)
>>> b
(3-5j)

对应的实部、虚部和共轭复数
>>> a.real
2.0
>>> a.imag
4.0
>>> a.conjugate()
(2-4j)
全部常见的数学运算均可以工做
>>> a+b
(5-1j)
>>> a-b
(-1+9j)
>>> a/b
(-0.4117647058823529+0.6470588235294118j)
>>> abs(a)
4.47213595499958
执行其余的复数函数好比正弦、余弦或平方根,使用cmath模块
>>> import cmath
>>> cmath.sin(a)
(24.83130584894638-11.356612711218173j)
>>> cmath.cos(a)
(-11.36423470640106-24.814651485634183j)
>>> cmath.exp(a)
(-4.829809383269385-5.5920560936409816j)
Python的标准数学函数确实状况下并不能产生复数值
>>> import math
>>> math.sqrt(-1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: math domain error
>>> import cmath
>>> cmath.sqrt(-1)
1j

7.无穷大与NaN函数

建立或测试正无穷、负无穷或NaN(非数字)的浮点数测试

>>> a = float('inf')
>>> b = float('-inf')
>>> c = float('nan')
>>> a
inf
>>> b
-inf
>>> c
nan
使用 math.isinf() 和 math.isnan() 函数检测
>>> math.isinf(a)
True
>>> math.isnan(c)
True
>>> math.isinf(b)
True
无穷大数在执行数学计算的时候会传播
>>> a+45
inf
>>> a*10
inf
>>> 10/a
0.0
有些操做时未定义的并会返回一个NaN结果。
>>> a/a
nan
>>> a+b
nan
NaN值会在全部操做中传播,而不会产生异常。
>>> c+11
nan
>>> c/3
nan
>>> c*3
nan
NaN值的一个特别的地方时它们之间的比较操做老是返回False。
>>> d=float('nan')
>>> c==d
False
>>> c is d
False
因为这个缘由,测试一个NaN值得惟一安全的方法就是使用 math.isnan()

8.分数运算code

fractions模块能够被用来执行包含分数的数学运算。字符串

>>> from fractions import Fraction
>>> a =Fraction(5,4)
>>> b = Fraction(7, 16)
>>> a
Fraction(5, 4)
>>> b
Fraction(7, 16)
>>> print a+b
27/16
>>> print a*b
35/64
取分子分母
>>> c= a*b
>>> c.numerator
35
>>> c.denominator
64
换算成小数
>>> float(c)
0.546875
限制分母
>>> c.limit_denominator(8)#分母不超过8的最接近的分数
Fraction(4, 7)
float转换为分数
>>> x=1.75
>>> y = Fraction(*x.as_integer_ratio())
>>> y
Fraction(7, 4)
相关文章
相关标签/搜索