Python基础类型转换:int、str、float函数用法详解
在 Python 编程中,数据的类型直接决定了它能参与的计算与操作。处理用户输入、读取文本文件或解析网络接口返回的数据时,往往需要把字符串转化为数值;而在生成报表、输出日志或拼装消息时,又需要把数值转回文本。int()、str() 和 float() 是 Python 最常用的三个内置类型转换函数。本文针对这三个函数的参数规则、取整逻辑、进制解析、精度限制及常见转换异常展开全面解析。
一、整型转换函数 int() 详解
int() 函数用于将数字或符合格式要求的字符串转换为整数。它的基本语法定义如下:
int(x=0)
int(x, base=10)
当不传入任何参数时,int() 默认返回整数 0。传入单个参数 x 时,转换方式取决于 x 的实际类型。
1. 浮点数转整数:向零截断机制
将浮点数传入 int() 时,Python 会直接丢弃小数部分,而不是进行四舍五入。这种截断方式被称为“向零取整”:
# 正数截断
print(int(3.14)) # 示例输出: 3
print(int(3.99)) # 示例输出: 3
# 负数截断(同样朝 0 的方向收敛)
print(int(-3.14)) # 示例输出: -3
print(int(-3.99)) # 示例输出: -3
如果业务场景需要四舍五入,应先调用内置的 round() 函数,再使用 int() 转换为整型:int(round(3.6))。
2. 字符串转整数的合法性要求
将字符串传入 int() 时,字符串内容必须完全符合整数字面量的书写格式。允许前后包含空格,但绝对不能包含小数点或字符字母,否则会直接抛出 ValueError:
# 合法转换:首尾空格会被自动忽略
num = int(" 128 ")
print(num) # 示例输出: 128
# 错误示例:包含小数点直接抛出异常
# int("12.5") -> ValueError: invalid literal for int() with base 10: '12.5'
3. 多进制转换特性
int() 还支持将特定进制的字符串解析为十进制整数。此时必须传入第二个参数 base,其取值范围为 2 到 36(或者 0):
# 二进制解析 (base=2)
bin_val = int("1101", 2)
print(bin_val) # 示例输出: 13
# 十六进制解析 (base=16)
hex_val = int("1F", 16)
print(hex_val) # 示例输出: 31
# 八进制解析 (base=8)
oct_val = int("77", 8)
print(oct_val) # 示例输出: 63
base 参数。如果对浮点数指定 base,例如 int(12.3, 2),将直接引发 TypeError。
二、浮点型转换函数 float() 详解
float() 函数用于将整数或由合法数字符号构成的字符串转换为双精度浮点数(底层对应 C 语言的 double,符合 IEEE 754 标准)。其基本语法如下:
float(x=0.0)
不传入参数时返回 0.0。下面是常见输入类型的转换规则。
1. 整数转浮点数
整数转为浮点数非常平滑,数值大小保持不变,系统在数值末尾补上 .0:
val = float(100)
print(val) # 示例输出: 100.0
print(type(val)) # 示例输出: <class 'float'>
2. 字符串转浮点数
float() 能够解析标准小数文本、整数文本以及科学计数法字符串:
# 标准小数字符串
print(float("3.14159")) # 示例输出: 3.14159
# 整数格式字符串自动转换为浮点表示
print(float("42")) # 示例输出: 42.0
# 科学计数法格式解析
print(float("1.25e-3")) # 示例输出: 0.00125
print(float("2.5E4")) # 示例输出: 25000.0
3. 特殊浮点常量的构造
在工程计算中,float() 还可以解析特殊的系统保留关键字文本,用于构造正无穷、负无穷及非数字(NaN):
inf_pos = float("inf") # 正无穷大
inf_neg = float("-inf") # 负无穷大
nan_val = float("nan") # 非数值(Not a Number)
print(inf_pos > 999999999) # 示例输出: True
print(nan_val == nan_val) # 示例输出: False (NaN 与自身不相等是其标准特性)
三、字符串转换函数 str() 详解
str() 函数负责将任意 Python 对象转化为便于阅读的文本字符串形式。其语法如下:
str(object='')
str(bytes_or_buffer, encoding='utf-8', errors='strict')
1. 万物皆可转换的底层原理
在 Python 中,几乎所有对象都可以传递给 str()。当调用 str(obj) 时,解释器底层会自动调用该对象的 __str__() 魔术方法;如果该类没有实现 __str__(),则会退回寻找并调用 __repr__() 方法:
# 数值转字符串
s1 = str(12345) # 结果: '12345'
s2 = str(3.14159) # 结果: '3.14159'
# 布尔与空值转字符串
s3 = str(True) # 结果: 'True'
s4 = str(None) # 结果: 'None'
# 容器结构转字符串
s5 = str([1, 2, 3]) # 结果: '[1, 2, 3]'
2. str() 与 repr() 的明确边界
很多初学者容易混淆 str() 与 repr():
str()的目标是生成面向人类用户的、易读友好的文本,隐去了内部细节。repr()的目标是生成面向开发者的、明确且无歧义的代码表示,通常能够通过eval(repr(obj))还原原对象。
import datetime
now = datetime.datetime(2026, 10, 20, 15, 30, 0)
print(str(now)) # 示例输出: 2026-10-20 15:30:00 (人类易读格式)
print(repr(now)) # 示例输出: datetime.datetime(2026, 10, 20, 15, 30) (准确类构造形式)
四、工程实战:常见陷阱与安全防御转换
在日常开发与生产环境中,外界传入的数据充满不确定性。直接无保护调用转换函数容易导致程序崩溃。以下整理典型避坑策略:
1. 带小数点的字符串无法直接通过 int() 转换
这是初学者最容易遇到的错误。如果接口返回 "99.0" 或 "3.14",直接执行 int("99.0") 将抛出 ValueError。正确的解法是进行链式中转,先转为浮点数,再转为整数:
raw_val = "99.0"
# 错误写法:
# int(raw_val) # 抛出 ValueError
# 正确写法:
target_int = int(float(raw_val))
print(target_int) # 示例输出: 99
2. 包含千分位逗号的数字文本处理
金融或统计数据常用千分位逗号隔开数字,例如 "1,024,000.50"。无论是 int() 还是 float() 都不支持直接解析逗号,必须在转换前使用 replace(",", "") 剔除:
currency_str = "1,024,000.50"
clean_str = currency_str.replace(",", "").strip()
amount = float(clean_str)
print(amount) # 示例输出: 1024000.5
3. 安全转换封装范式(Safe Cast)
在编写业务逻辑时,推荐将类型转换包装为带有默认容错返回的安全辅助函数,防止脏数据引发致命崩溃:
def safe_to_int(val, default=0):
"""安全转换为整型,若失败返回指定的默认值"""
try:
if isinstance(val, str):
val = val.strip()
# 若包含小数点,先中转为 float
if "." in val:
return int(float(val))
return int(val)
except (ValueError, TypeError, OverflowError):
return default
def safe_to_float(val, default=0.0):
"""安全转换为浮点型,若失败返回指定的默认值"""
try:
if isinstance(val, str):
val = val.strip().replace(",", "")
return float(val)
except (ValueError, TypeError, OverflowError):
return default
# 测试防御函数
print(safe_to_int("128")) # 示例输出: 128
print(safe_to_int("3.14")) # 示例输出: 3
print(safe_to_int("invalid")) # 示例输出: 0
print(safe_to_int(None, -1)) # 示例输出: -1
print(safe_to_float("1,200.5"))# 示例输出: 1200.5
五、函数特性横向对比速查表
| 转换函数 | 默认无参输出 | 浮点输入处理 | 纯字符输入处理 | 核心应用场景 |
|---|---|---|---|---|
int(x, [base]) |
0 |
向零取整(直接抹除小数部分) | 必须是有效整数串,否则报 ValueError | 计数、数组下标、进制换算、取整 |
float(x) |
0.0 |
保持不变 | 支持小数、整数、科学计数法 | 高精度科学计算、几何坐标、汇率度量 |
str(obj) |
''(空字符串) |
转为对应的小数格式字符串 | 原样保持或返回描述文本 | 日志记录、消息展示、文件持久化存储 |
掌握 int()、str() 与 float() 的转换边界与内部行为,是编写健壮 Python 程序的重要前提。在实际编码中,只要牢记“整型字符串无小数”、“浮点转换向零截断”以及“外部输入做异常拦截”这三条核心原则,就能彻底避免绝大多数因类型转换导致的程序异常。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









