數值

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 類別從字串、浮點數、布林值建立整數,使用 octhex 類別可以將十進位整數以八進位、十六進位表示字串傳回。例如:

>>> 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
>>>

布林

布林值 TrueFalsebool 的實例,由於早期的 Python 中,TrueFalse 只是 1、0 的別名,因此 TrueFalse 也代表 1 與 0,可以直接與其他數字進行運算:

>>> 1 + True
2
>>> 2 + False
2
>>>

在 Python 程式中一些判斷真假的場合,00.00j(複數)''[](空 list)、{}(空字典)、set()(空集合)、()(空 tuple)、None 會被當成是假,也就是條件不成立,其他的內建型態值則會被當作成立,這之後還會談到。

00.00j''[]{}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 剖析為浮點數,接著再用 intmath.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 的複數表示方式,顯然也受到了工程領域的影響。

分享到 LinkedIn 分享到 Facebook 分享到 Twitter