數值
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 的複數表示方式,顯然也受到了工程領域的影響。