类型转换
Python 是强类型语言,不同类型之间不会自动隐式转换,必须显式调用转换函数。掌握这些函数的精确行为,能避免运行时异常和逻辑错误。
int():转整数
int() 可将符合格式的字符串或数字转为整数:
# 从字符串转换
print(int("42")) # 42
print(int(" 42 ")) # 42,自动去除两端空白
print(int("-42")) # -42
# 从浮点数转换(向零取整)
print(int(3.7)) # 3
print(int(-3.7)) # -3,不是 -4
# 指定进制解析
print(int("1010", 2)) # 10
print(int("FF", 16)) # 255
print(int("z", 36)) # 35,支持 2-36 进制
常见错误:
# int("3.14") # ValueError,含小数点不能直接转
# int("") # ValueError,空字符串
# int("abc") # ValueError
# int(3+4j) # TypeError,复数不能转 int
正确做法是先转 float 再转 int:
print(int(float("3.14"))) # 3
float():转浮点数
# 从字符串转换
print(float("3.14")) # 3.14
print(float(" 2.5 ")) # 2.5
print(float("1e3")) # 1000.0
# 从整数转换
print(float(42)) # 42.0
print(float(0)) # 0.0
常见错误:
# float("") # ValueError
# float("abc") # ValueError
# float("3.14.15") # ValueError
# float(3+4j) # TypeError
str():转字符串
str() 可将任何对象转为字符串表示:
print(str(42)) # "42"
print(str(3.14)) # "3.14"
print(str(True)) # "True"
print(str(None)) # "None"
str() 面向用户,可读性好;repr() 面向开发者,通常可重新求值:
s = "hello\nworld"
print(str(s)) # hello\nworld(实际换行)
print(repr(s)) # 'hello\nworld'(转义显示)
bool():转布尔值
bool() 根据真值判断规则转换。以下值为 False:
print(bool(0)) # False
print(bool(0.0)) # False
print(bool("")) # False
print(bool([])) # False
print(bool({})) # False
print(bool(None)) # False
其余均为 True,包括非零数字、非空容器:
print(bool(1)) # True
print(bool(-1)) # True,非零即真
print(bool(" ")) # True,非空字符串
print(bool([0])) # True,非空列表
序列类型转换
# list():转列表
print(list("abc")) # ['a', 'b', 'c']
print(list((1, 2, 3))) # [1, 2, 3]
print(list(range(3))) # [0, 1, 2]
# set():转集合,去重
print(set([1, 2, 2, 3])) # {1, 2, 3}
print(set("hello")) # {'h', 'e', 'l', 'o'}
# dict():从键值对序列转换
print(dict([("a", 1), ("b", 2)])) # {'a': 1, 'b': 2}
常见错误:
# list(123) # TypeError,整数不可迭代
# dict(["ab", "cd"]) # ValueError,元素长度不为 2
# set([[1, 2]]) # TypeError,列表不可哈希
组合转换与异常处理
实际编程中常需要连续转换:
# 用户输入处理
user_input = " 42.5 "
value = float(user_input.strip())
print(int(value)) # 42
# 字符串解析数字列表
data = "1, 2, 3, 4"
numbers = [int(x.strip()) for x in data.split(",")]
print(numbers) # [1, 2, 3, 4]
用户输入常导致转换失败,应使用异常处理:
def safe_int(value, default=0):
try:
return int(value)
except (ValueError, TypeError):
return default
print(safe_int("42")) # 42
print(safe_int("abc")) # 0
print(safe_int(None)) # 0
类型转换是数据处理的日常操作。核心原则:明确转换规则,处理异常输入,避免隐式假设。对于用户输入,永远先做验证和清理,再转换。