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)