Python 型別轉換 (Type Conversion)
Python 提供多種函數來轉換資料型別。
隱式型別轉換 (Implicit Conversion)
Python 會自動進行某些型別轉換:
# int + float = float
result = 5 + 3.14
print(result) # 8.14
print(type(result)) # <class 'float'>
# int + bool = int(True = 1, False = 0)
result = 5 + True
print(result) # 6
print(type(result)) # <class 'int'>
顯式型別轉換 (Explicit Conversion)
使用內建函數手動轉換型別。
int() - 轉換為整數
# 浮點數轉整數(小數部分直接捨去)
print(int(3.7)) # 3
print(int(3.2)) # 3
print(int(-3.7)) # -3
# 字串轉整數
print(int("42")) # 42
print(int("-10")) # -10
# 布林轉整數
print(int(True)) # 1
print(int(False)) # 0
# 其他進制字串轉整數
print(int("1010", 2)) # 10(二進制)
print(int("FF", 16)) # 255(十六進制)
print(int("17", 8)) # 15(八進制)
字串必須是有效的整數格式,否則會報錯:
# int("3.14") # ValueError!
# int("hello") # ValueError!
float() - 轉換為浮點數
# 整數轉浮點數
print(float(10)) # 10.0
# 字串轉浮點數
print(float("3.14")) # 3.14
print(float("-2.5")) # -2.5
print(float("10")) # 10.0
print(float("1e3")) # 1000.0(科學記號)
# 布林轉浮點數
print(float(True)) # 1.0
print(float(False)) # 0.0
str() - 轉換為字串
# 數字轉字串
print(str(42)) # "42"
print(str(3.14)) # "3.14"
print(str(-10)) # "-10"
# 布林轉字串
print(str(True)) # "True"
print(str(False)) # "False"
# 其他型別
print(str([1, 2, 3])) # "[1, 2, 3]"
print(str({"a": 1})) # "{'a': 1}"
print(str(None)) # "None"
bool() - 轉換為布林值
# 數字轉布林
print(bool(1)) # True
print(bool(0)) # False
print(bool(-1)) # True
print(bool(0.0)) # False
# 字串轉布林
print(bool("Hello")) # True
print(bool("")) # False
print(bool("False")) # True(非空字串都是 True)
# 序列轉布林
print(bool([1, 2])) # True
print(bool([])) # False
print(bool({})) # False
# None 轉布林
print(bool(None)) # False
list() - 轉換為 List
# 字串轉 list
print(list("Hello")) # ['H', 'e', 'l', 'l', 'o']
# Tuple 轉 list
print(list((1, 2, 3))) # [1, 2, 3]
# Set 轉 list
print(list({3, 1, 2})) # [1, 2, 3](順序可能不同)
# Dict 轉 list(只有 keys)
print(list({"a": 1, "b": 2})) # ['a', 'b']
# Range 轉 list
print(list(range(5))) # [0, 1, 2, 3, 4]
tuple() - 轉換為 Tuple
# List 轉 tuple
print(tuple([1, 2, 3])) # (1, 2, 3)
# 字串轉 tuple
print(tuple("Hello")) # ('H', 'e', 'l', 'l', 'o')
# Set 轉 tuple
print(tuple({1, 2, 3})) # (1, 2, 3)
set() - 轉換為 Set
# List 轉 set(會去除重複)
print(set([1, 2, 2, 3, 3])) # {1, 2, 3}
# 字串轉 set
print(set("Hello")) # {'H', 'e', 'l', 'o'}
# Tuple 轉 set
print(set((1, 2, 3))) # {1, 2, 3}
dict() - 轉換為 Dictionary
# 從鍵值對序列建立
print(dict([("a", 1), ("b", 2)])) # {'a': 1, 'b': 2}
print(dict((("a", 1), ("b", 2)))) # {'a': 1, 'b': 2}
# 從關鍵字參數建立
print(dict(a=1, b=2)) # {'a': 1, 'b': 2}
# 使用 zip
keys = ["a", "b", "c"]
values = [1, 2, 3]
print(dict(zip(keys, values))) # {'a': 1, 'b': 2, 'c': 3}
數字格式轉換
num = 255
# 轉換為二進制字串
print(bin(num)) # 0b11111111
# 轉換為八進制字串
print(oct(num)) # 0o377
# 轉換為十六進制字串
print(hex(num)) # 0xff
# 轉換字元和 ASCII 碼
print(ord("A")) # 65(字元轉 ASCII 碼)
print(chr(65)) # A(ASCII 碼轉字元)
安全的型別轉換
轉換前先檢查是否可以轉換:
def safe_int(value, default=0):
"""安全地將值轉換為整數"""
try:
return int(value)
except (ValueError, TypeError):
return default
print(safe_int("42")) # 42
print(safe_int("hello")) # 0
print(safe_int(None)) # 0
print(safe_int("abc", -1)) # -1(使用自訂預設值)
# 檢查字串是否可以轉換為數字
text = "123"
if text.isdigit():
num = int(text)
print(num) # 123
# 注意:isdigit() 不處理負數和小數
print("-123".isdigit()) # False
print("3.14".isdigit()) # False