- Python從入門到項目實踐(超值版)
- 聚慕課教育研發中心
- 1525字
- 2020-01-20 14:50:12
3.2 數字類型的操作
在3.1節中了解了數字類型包括整數類型、整數的按位運算、浮點數、復數類型和布爾類型。那么在這一節中將學習數字類型的基本操作方法。
3.2.1 內置的數值操作符

在Python中,內置的操作運算符主要分為四種,分別是算術運算符、賦值運算符、邏輯運算符和關系運算符。其實例分別如下。
1. 算術運算符
算術運算符如表3-3所示。
表3-3 算術運算符

具體使用及輸出如下。
【例3-8】算術運算。

2. 賦值運算符
賦值運算符如表3-4所示。
表3-4 賦值運算符

具體使用及輸出如下。
【例3-9】賦值運算。

注意:除法運算結果為浮點數,和被除數與除數的類型無關。
3. 邏輯運算符
邏輯運算符如表3-5所示。
表3-5 邏輯運算符

邏輯運算主要與布爾值的判斷和0、1操作有關。
【例3-10】邏輯運算。

4. 比較運算符
比較運算符如表3-6所示。
表3-6 比較運算符

【例3-11】比較運算。

3.2.2 內置的數值運算函數

內置的數值運算函數如表3-7所示。
表3-7 內置的數值運算函數

部分函數操作及其具體用法示例如下。
【例3-12】函數運算。

常見的函數操作中,部分函數的用法需要特殊記憶。下面列舉的函數其用法雖然不廣泛,但是對于理解Python的數據類型和存儲有著較為直觀的意義。
(1)函數round()與精度誤差。
函數round()的作用為將浮點數A進行四舍五入,并指定小數的位數。關于舍入需要知道Python中浮點數的特征。
浮點數本身就是非精確數據。大多數十進制小數并不能完全用二進制小數來表示。因此,輸入的十進制浮點數一般只能用二進制浮點數來進行近似。
例如在十進制中,對于分數1/3,將其寫成小數時只能無限近似寫成1.333…,同理,在面對十進制浮點小數例如0.1時,無法將其完美地換算為二進制數據,只能無限近似。Python中存在一個近似策略,用戶面對的屏幕輸出的十進制數值僅是被輸出的一個近似值,其真實的值以二進制數值存儲在機器上。上述情況告訴我們,Python以舍入形式進行數據的近似管理。
round()函數在使用上實際上也很簡單。
【例3-13】round()函數。

這和人們認知中的小數近似結果一致,即四舍五入,但是有時候考慮到前面提到的存儲情況時就會出現另一種狀況。
【例3-14】round()函數精度。

可以清楚地看到,這似乎違背了四舍五入的基本法則,實際上這是由于計算機只能采用近似儲存浮點數,導致精度誤差所致。官方文檔存在下列說明:

可以得知數據在近似轉換為0、1儲存時被進行了截斷處理,因此導致了精度誤差,為此round()近似函數實際上只能進行對精度要求不大的近似求值。關于精確計算,Python提供了其他選擇,例如后續將要學到的math模塊中的ceiling方法和將要介紹的decimal模塊。
(2)pow()函數的使用。
pow(x,y[,z])函數看似等價于(x**y)%z。
【例3-15】pow()函數。

但是實際上,它們并不完全等價。
【例3-16】特殊pow()函數。

可知,Python不允許第三個操作數為浮點數,這與x**y%z存在差異,可知在使用上并不完全等價。
3.2.3 內置的數字類型轉換函數

內置的數字類型轉換函數如表3-8所示。
表3-8 內置的數字類型轉換函數

函數使用舉例如下。
【例3-17】ascii()函數。
ascii()函數類似Python 2.X中的repr()函數,結果為返回這個指定可打印對象的字符串表示,如果此對象為非ascii字符就以轉義字符型輸出(\x,\u等),例如中文字符串,具體實例如下。

其中,函數int(x[,base])和函數float(x[,base])內的第二個參數的含義通過以下實例來解釋。
【例3-18】int()函數。

通過實例可以知道,參數base的作用是指定第一個參數的進制類型。此時的x參數不可為數字,只能為字符串、數組或者將要學到的數組列表類型。
base默認為十進制,當指定為8時是八進制,為16時是十六進制等,但注意當其為0的時候,依舊表示十進制。
對于函數complex(real,[imag]),其實例如下。
【例3-19】complex()函數。

可知參數real和imag也可以為計算式,如果第一個參數是一個字符串,它將被解釋為一個復數,并且必須在沒有第二個參數的情況下調用該函數。第二個參數不可以為字符串。每個參數可以是任何數字類型(包括復數)。如果省略imag,則默認為零,構造函數用作int和float之類的數字轉換。如果省略兩個參數,則返回0j。