码迷,mamicode.com
首页 > 编程语言 > 详细

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

时间:2015-08-10 08:18:12      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:

5.字节到大整数的转换

#拥有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的浮点数来指定

>>> 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.分数运算

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)


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

标签:

原文地址:http://my.oschina.net/u/1409733/blog/489915

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!