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)
相關文章
相關標籤/搜索