1. 程式人生 > >三:python 對象類型詳解一:數字(上)

三:python 對象類型詳解一:數字(上)

結果 dom 運行 精度 升級 方法 函數 般的 代碼

一:python 的數字類型:

a)整數和浮點數

b)復數

c)固定精度的十進制數

d)有理分數

e)集合

f)布爾類型

g)無窮的整數精度

h)各種數字內置函數和模塊

二:各種數字類型的詳解

  1,數字常量:python提供了:整數(正整數和負整數)和浮點數(帶有小數部分的數字)。python還允許我們使用十六進制,八進制和二進制常量來表示整數,並且允許整數具有無窮的精度。

  (¥)內置數學工具和擴展:python提供了一系列處理數字對象的工具:

    a)表達式操作符:+,-,*,/,>>(右移),**(冪),& 等

    b)內置數學函數:pow(), abs(), round(), int(), hex(), bin() 等

    c)公用模塊:random, math 等

  (¥)操作符的優先級:通常我們不用太註意優先級,可以用多個小括號進行優先級設定,這樣不但可以完全忘掉優先級的事情,而且可以增加程序的可讀性。

  (¥)混合類型自動升級:python首先將被操作的對象轉換成其中最復雜的操作對象的類型,然後再進行數字運算。python劃分數字類型復雜度的方法:‘’整數比浮點數簡單,浮點數比復數簡單‘’。

   (¥) 數字格式的顯示問題:交互提示模式下結果的自動回顯會比打印語句顯示更多的數字位數。如果不想看到更多的位數,可以使用print()。str和repr顯示格式:repr默認的交互模式回顯,結果好像它們是代碼;str(也就是打印語句)轉變為一種對用戶更加友好的格式。這兩個函數都會把任意對象變換成它們的字符串表示。如下所示:

        

1 >>> num = 1 / 3.0
2 >>>repr(num)
3 0.3333333333331
4 >>> str(num)
5 0.333333333

   (¥) 比較問題:python 支持連續的比較,eg: (1 < 2 < 3) equal (1 < 2 and 2< 3)

三:除法詳解:

  a) ‘/’ : 在python3.0以上版本中,/現在總是執行真除法,不管操作數的類型,都返回包含任何余數的一個浮點結果。在python2.6中表示傳統除法:eg:10 / 4 == 2

  b) ‘//’ :在python3.0以上版本中,// 執行Floor除法,它截除掉余數並且針對整數操作數返回一個整數,如果有任何一個操作數是浮點類型,則返回一個浮點數。

 >>>
 >>> 10 / 4
 2.5
 >>> 10 // 4
 2
 >>> 10 / 4.0
 2.5
 >>> 10 // 4.0
 2.0

為了前後版本的 ‘/’ 相互兼容,作為替代方法,我們可以使用一個__future__import 在python2.6中打開python3.0的 ‘/’,而不是用浮點轉換來強制它:

 c:\python26\python
 >>> from__future__import
 >>> 10 / 4
 2.5

  c) Floor除法VS截斷除法:

    ‘//’ 操作符通常叫做截斷除法,但是更為準確的說法是floor除法,他把結果向下截斷到它的下層,即真正結果之下的最近的整數。其直接效果是向下舍入,並不是嚴格的截斷,並且這對負數也有效。trunc():math模塊中的函數,用於截斷小數,返回一個整數。

>>>import math
>>>math.floor(2.5)
2
>>>math.floor(-2.5)
-3
>>>math.trunc(2.5)
2
>>>math.trunc(-2.5)
-2

四:復數詳解:

  復數表示為兩個浮點數(實部和虛部)並接在虛部增加了j或者J的後綴。復數允許我們復分解出它的實部和虛部作為屬性,並支持一般的數學表達式,並且可以通過標準的cmath模塊(復數版的標準數學模塊)中的工具進行處理。

五:十六進制,八進制,二進制計數:

  記住,這些常量只是指定一個整數對象的值的一種替代方法。十六進制數(0x40),八進制數(0o377),二進制數(0b1100)。但python默認使用十進制數來顯示,但它提供了內置的函數,允許我們把整數轉換為其他進制的數字字符串

>>> oct(64),hex(64),bin(64)
(0o100,0x40,0b1000000)

另一種方式:內置的int()會將一個數字的字符串變換為一個整數,並可以通過定義的第二個參數來確定變換後的數字的進制:

>>> int (64),int (100,8),int(40,16),int(1000000,2)  #八進制的100,十六進制的40
(64,64,64,64)  #十進制顯示
>>> int(0x40,16),int(0b1000000,2)
(64,64)

又一種方式:evla()函數會把字符串作為python代碼。因此具有類似的效果(但往往允許很慢,它實際上會作為程序的一個片段編譯並運行這個字符串,並且它假設你信任字符串的來源。耍小聰明的用戶也許能提交一個刪除機器上文件的字符串):

>>> eval(64),eval(0o100),eval(0x40),eval(0b1000000)
(64,64,64,64)

最後:能夠使用字符串格式化方法調用和表達式將一個整數轉換成八進制數和十六進制數的字符串

>>> {0:o},{1:x},{2:b}.format(64,64,64)   #字符串格式方法
100,40,1000000

>>>%o,%x %(64,255)  #表達式方法
100,ff

三:python 對象類型詳解一:數字(上)