數值
April 8, 2022在 Python 中,數值型態有整數、浮點數、布林值與複數,雖然在 Python 中,所有的資料都是物件,但你可以使用實字(Literal)方式來撰寫表示數值。
整數
整數就是整數,不區分整數與長整數,整數的長度不受限制(除了硬體上的限制)。直接寫下一個整數值,預設是十進位整數,如果要撰寫二進位實字,則在數字前前 0b,如果要撰寫八進位實字,則在數字前置 0o,之後接上 1 到 7 的數字,如果要撰寫十六進位整數,則以 0x 開頭,之後接上 1 到 9、A 到 F。例如:
>>> 10
10
>>> 0b10
2
>>> 0o10
8
>>> 0x10
16
>>>
從 Python 3.6 開始,在撰寫數字時,可以使用底線,這對冗長的數字在撰寫與閱讀上很有幫助。例如:
>>> 1_000_000_000_000_000
1000000000000000
>>> 0x_FF_FF_FF_FF
4294967295
>>> 0b_1001_0100_1011_0011
38067
>>>
可以看到,Python 的整數支援很大的整數,無論是十進位、八進位或十六進位整數,都是 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'
>>>
當使用字串建構整數時,還可以指定基底。例如:
>>> int('10', 8)
8
>>> int('10', 16)
16
>>> int('10', 2)
2
>>>
布林
布林值 True、False 為 bool 的實例,由於早期的 Python 中,True、False 只是 1、0 的別名,因此 True、False 也代表 1 與 0,可以直接與其他數字進行運算:
>>> 1 + True
2
>>> 2 + False
2
>>>
在 Python 程式中一些判斷真假的場合,0、0.0、0j(複數)、''、[](空 list)、{}(空字典)、set()(空集合)、()(空 tuple)、None 會被當成是假,也就是條件不成立,其他的內建型態值則會被當作成立,這之後還會談到。
將 0、0.0、0j、''、[]、{}、set()、()、None 等傳給 bool,都會傳回 False,其他的內建型態值傳入 bool,都會傳回 True。
浮點數
浮點數是 float 的實例,可以使用 3.14e-10 科學記號表示法,如果想將字串剖析為浮點數,可以使用 float。例如:
>>> type(3.14)
<class 'float'>
>>> 3.14e-10
3.14e-10
>>> float('1.414')
1.414
>>>
如果有個字串是 '3.14',想取得整數部份並剖析為 int,不可以直接拿來呼叫 int,這樣會出現 ValueError 錯誤,要先使用 float 剖析為浮點數,接著再用 int 或 math.floor(往負方向的捨入)、math.ceil(往正方向的捨入)、math.round(往最接近數字方向捨入,若最接近的數字距離相同,向相鄰偶數捨入)等函式取得整數。例如:
>>> int('3.14')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: invalid literal for int() with base 10: '3.14'
>>> int(float('3.14'))
3
>>> import math
>>> math.floor(float('3.14')) # 往負方向的捨入
3
>>>
複數
Python 支援複數的實字表示,複數是 complex 類別的實例。例如:
>>> a = 3 + 2j
>>> b = 5 + 3j
>>> c = a + b
>>> c
(8+5j)
>>> type(c)
<class 'complex'>
>>>
雖然在數學界,複數會使用 i 來代表虛數的部份,然而在電子電機相關的工程領域,慣例卻是使用 j 來表示虛部,這是因為 i 在這類工程領域,往往被用來表示電流符號,Python 的複數表示方式,顯然也受到了工程領域的影響。


