資料型別轉換
Python語言在宣告變數時,並不需要考慮資料的範圍,系統會自動根據變數值採用適當的資料型別。Python 使用這種方式宣告變數,對程式設計者而言非常友善。但是在運算這些變數時,因為資料型別不同,就需要做一些特殊的處理,才不會造成運算結果不如預期,甚至造成執行時產生錯誤。為避免上述的問題,可以利用系統的 「自動型別轉换」(Automatic Type Conversion)來轉型,或是使用強制型別轉換(Cast)來自行轉型,前者是屬於隱含(Implicit)方式,而後者則是屬於外顯(Explicit)方式轉型。
1. 自動型別轉換
運算式中若有資料型別不同的數值要做運算時,除非主動使用強制型別轉換外,否則系統會做自動型別轉換,將資料型別轉成一致後才進行運算。
自動型別轉換是屬於隱含方式,如果兩不同資料型別的資料需要做運算時,是將型別長度較小的資料先轉成型別長度較大者,兩者調整為相同的資料型別才做運算。其轉型規則如下:

[例] 下列為四則運算自動轉型的範例: (檔名:automatic.py)
b, i, f = True, 2, 3.4
# 以下 bool + int 時,bool 自動轉型成 int(True 轉成 1, False 轉成 0)
print(b + i, b + f, i + f) # 3 4.4 5.4
print(b - i, b - f, i - f) # -1 -2.4 -1.4
print(b * i, b * f, i * f) # 2 3.4 6.8
# 運算子為浮點除法,所以運算子會先轉成浮點數再做運算
print(b / i, b / f, i / f) # 0.5 0.29411764705882354 0.58823529411764712. 強制型別轉換
-
程式中必要時可將變數的資料型別做轉換,強制型別轉換是使用函式,以外顯方式轉換型別。
- 整數轉浮點數: float(整數資料)
- 浮點數轉整數: int(浮點數資料)
- 浮點數轉整數: round(浮點數資料)
- 數值轉字串: str(數值資料)
- 轉布林值: bool(資料)
-
小範圍資料型別轉型為較大範圍型別時,變數值沒有問題。但是大範圍轉型為較小範圍資料型別時,變數值就會失真。例如浮點數用
int()函式強制轉型為整數時,會將小數部分直接捨棄,不會做四捨五入的運算。
[例] 下列為強制轉型的範例: (檔名:cast.py)
i1=10
f1=float(i1) # 使用 float() 函式將整數轉型為浮點數
print(i1,f1,type(f1)) # -> 10 10.0 <class 'float'>
f2=1234.5678
i2=int(f2) # 使用 int() 函式將浮點數轉型為整數(捨棄小數)
print(f2,i2,type(i2)) # -> 1234.5678 1234 <class 'int'>
i3=round(f2) # 使用 round() 函式將浮點數轉型為整數(四捨五入)
print(f2,i3,type(i3)) # 1234.5678 1235 <class 'int'>
s=str(i2) # 使用str()函式將整數轉型為字串
print(s,type(s)) # -> 1234 <class 'str'>
b=bool(f1) # 使用 bool()函式將浮點數轉型為布林值
print(b,type(b)) # > True <class 'bool'>相關主題與延伸閱讀
- 4. 運算子:運算式中不同資料型別做運算時,會自動觸發型別轉換規則。
- 3. 變數與資料型別:變數的資料型別會隨指定值而動態改變,是理解型別轉換的基礎。
- 1. 內建資料型別:認識 Python 內建的各種資料型別,是型別轉換的前提知識。