Python 有三種不同的內建數字型別:整數(int)、浮點數(float)與複數(complex)。
分數(fractions.Fraction)與十進位數(decimal.Decimal)也可以從標準函式庫匯入使用。
整數,包括十六進位(hex())、八進位(oct())與二進位(bin())數字,只要不帶小數點,也同樣算作ints:
# Ints are whole numbers.
>>> 1234
1234
>>> type(1234)
<class 'int'>
>>> -12
-12
含有小數點的數字(不論有沒有小數部分)會被視為floats:
>>> 3.45
3.45
>>> type(3.45)
<class 'float'>
Python 完整支援這些不同數字型別之間的算術運算。當這些數字與二元算術運算子(+、-、*、/、//與%)一起使用時,Python 會把範圍較窄的數字轉換成與較寬的數字相符的型別。
所有數字(複數除外)都支援所有算術運算,並依照運算子優先順序求值。
複數在數學函式(+與-以外的)方面的支援,可以在 cmath 模組中找到。
加法與減法運算子的行為和一般數學相同。
如果運算元中有一個或多個是float,其餘的int也會被轉換成float:
>>> 5 - 3
2
# The int is widened to a float here, and a float is returned.
>>> 3 + 4.0
7.0
和加法與減法一樣,乘法也會把範圍較窄的數字轉換成與較寬的數字相符的型別:
>>> 3 * 2
6
>>> 3 * 2.0
6.0
除法一律回傳float,即使結果是整數也一樣:
>>> 6/5
1.2
>>> 6/2
3.0
如果需要int的結果,你可以用向下取整除法把結果截斷。
向下取整除法是使用//運算子來執行:
>>> 6//5
1
>>> 6//2
3
取餘數運算子(%)會回傳兩個運算元相除後的餘數:
# The result of % is zero here, because dividing 8 by 2 leaves no remainder
>>> 8 % 2
0
# The result of % is 2 here, because 3 only goes into 5 once, with 2 left over
>>> 5 % 3
2
5 % 3 的另一種看法:
>>> whole_part = int(5/3)
1
>>> decimal_part = 5/3 - whole_part
0.6666666666666667
>>> whole_remainder = decimal_part * 3
2.0
次方運算是使用**運算子來執行:
>>> 2 ** 3
8
>>> 4 ** 0.5
2
你可以使用內建函式int()和float(),把數字從int轉成floats,或從floats轉成int:
>>> int(3.45)
3
>>> float(3)
3.0
Python 提供了一個內建函式 round(<number>, <decimal_places>),可以把浮點數四捨五入到指定的小數位數。
如果沒有指定小數位數,數字會四捨五入到最接近的整數,並回傳int:
>>> round(3.1415926535, 2)
3.14
>>> round(3.1415926535)
3
Python 允許你使用括號把運算式分組。 當你想覆寫預設的運算順序時,這就很有用。
>>> 2 + 3 * 4
14
>>> (2 + 3) * 4
20
Python 依照 PEMDAS 規則決定運算子優先順序。
這表示()內的計算優先順序最高,接著是**,然後是*、/、//、%、+與-:
>>> 2 + 3 - 4 * 4
-11
>>> (2 + 3 - 4) * 4
4
# In the following example, the `**` operator has the highest priority, then `*`, then `+`
# Meaning we first do 4 ** 4, then 3 * 256, then 2 + 768
>>> 2 + 3 * 4 ** 4
770
Python 的整數具有任意精度,位數只受限於主機系統可用的記憶體。
浮點數通常是用 C 的double來實作(15 位小數的精確度),但表示方式會因主機系統而異。
複數則有real和imaginary兩個部分,兩者都由浮點數表示。
如果你想更深入了解各種程式語言中浮點數運算的問題與限制,可以看看 0.30000000000000004.com 和 The Python Tutorial。