在Python 3中,整數就是整數,不再區分整數與長整數,整數的長度不受限制(除了硬體上的限制之外)。直接寫下一個整數值,預設是十進位整數,如果要撰寫二進位實字,則在數字前加0b,如果要撰寫八進位實字,則在數字前置0o,之後接上1到7的數字,如果要撰寫十六進位整數,則以0x開頭,之後接上1到9、A到F。例如:
| >>> 1010 >>> 0b102 >>> 0o108 >>> 0x1016 >>> |
無論是十進位、八進位或十六進位整數,都是int類別的實例:
| >>> type(1)<class 'int'> >>> type(0o10)<class 'int'> >>> type(0x10)<class 'int'> >>> |
你可以使用int類別從字串、浮點數、布林值建立整數,使用oct、hex類別可以將十進位整數以八進位、十六進位表示字串傳回。例如:
| >>> int('10')10 >>> int(3.14)3 >>> int(True)1 >>> int(False)0 >>> oct(10)'0o12' >>> hex(10)'0xa' >>> 1 + True2 >>> 2 + False2 >>> |
正如以上所看到的,布林值True、False也可以是代表1與0,為bool的實例,bool為int的子類別。事實上,在Python中,數字不是0就是True,而所有物件不是「空」就是True,例如字串'Justin'在判斷式中會是True,而空字串''在判斷式中會是False,所以空串列是False、空字典是False、空Tuple是False,而None也是False(之後還會介紹這些型態)。
當使用字串建構整數時,還可以指定基底。例如:
| >>> int('10', 8)8 >>> int('10', 16)16 >>> int('10', 2)2 >>> |
浮點數是float的實例,可以使用3.14e-10這樣的表示法,如果兩個整數相除後,結果必須是浮點數時,Python會自動處理。例如:
| >>> 10 / 33.3333333333333335 >>> 10 // 33 >>> |
在上例中,/是除法運算子,雖然10與3都是整數,但結果是3.333...的話,就會運算出浮點數結果(在其他語言中,例如Java,結果會是3)。//則會將除法結果的小數部份去掉,%則是取得除法後的餘數。除了/與//之外,+、-、*等都可以運用在數值上,另外還有**次方運算。例如要計算2的100次方:
| >>> 2 ** 1001267650600228229401496703205376 >>> |
使用浮點數,同樣要注意浮點數精度問題,例如:
| >>> 1.0 - 0.80.19999999999999996 >>> print(1.0 - 0.8)0.2 >>> |
開發人員基本上都要了解CPU處理浮點數的設計原理,在Python中,如果你在指令互動環境中直接顯示運算結果,則會出現0.19999999999999996的結果,如果你使用print()函式,則會出現0.2的結果,這是因為互動環境其實是使用repr()函式來顯示程式開發人員該了解的結果,而print()函式則使用str()函式來顯示較友善、適於非開發人員觀看的結果。例如:
| >>> repr(1.0 - 0.8)'0.19999999999999996'>>> str(1.0 - 0.8)'0.2' >>> |
事實上,精度問題確實存在,如果你要精確的結果,那麼可以使用decimal.Decimal類別。例如:
| >>> import decimal>>> a = decimal.Decimal('1.0') >>> b = decimal.Decimal('0.8') >>> a - bDecimal('0.2') |
Python支援複數的實字表示,複數是complex類別的實例。例如:
| >>> a = 3 + 2j >>> b = 5 + 3j >>> c = a + b >>> c(8+5j) >>> type(c)<class 'complex'> >>> |
沒有留言:
張貼留言