Python int 函数
上次修改时间:2025 年 4 月 11 日
本综合指南探讨 Python 的 int 函数,该函数将值转换为整数。我们将介绍数值转换、进制处理、错误情况以及整数转换的实际示例。
基本定义
int 函数返回一个从数字或字符串构造的整数对象。它可以处理不同的数字进制并截断浮点数。
主要特点:将字符串/数字转换为整数,处理进制转换(2-36),截断浮点数(不四舍五入),并为无效输入引发 ValueError。
基本数值转换
以下是使用不同数值类型的简单用法,展示了 int 如何处理各种输入格式并截断浮点数。
# With integers print(int(10)) # 10 print(int(-10)) # -10 # With floats print(int(3.14)) # 3 (truncates) print(int(-3.99)) # -3 (truncates) # With boolean print(int(True)) # 1 print(int(False)) # 0
此示例显示了 int 与不同数值类型的使用。对于浮点数,它会截断小数部分而不进行四舍五入。布尔值转换为 1 或 0。
请注意,int 不会对数字进行四舍五入 - 它只是删除小数点后的所有内容,从而有效地向零截断。
字符串转换
int 函数可以将字符串转换为整数,可以选择指定进制。此示例演示了各种字符串转换。
# Decimal strings
print(int("42")) # 42
print(int(" -42 ")) # -42 (whitespace ignored)
# Different bases
print(int("1010", 2)) # 10 (binary)
print(int("FF", 16)) # 255 (hexadecimal)
print(int("22", 8)) # 18 (octal)
# With base 0 (auto-detect from prefix)
print(int("0b1010", 0)) # 10
print(int("0xFF", 0)) # 255
字符串转换处理前导/尾随空格并支持不同的进制。进制 0 会从前缀(0b、0o、0x)自动检测。
对于进制转换,字符串必须表示该进制中的有效数字,否则会引发 ValueError。
错误处理
int 函数会为无效转换引发 ValueError。此示例展示了正确的错误处理技术。
# Invalid string conversion
try:
print(int("3.14"))
except ValueError as e:
print(f"Error: {e}") # invalid literal for int()
# Invalid base
try:
print(int("FF")) # missing base for hex
except ValueError as e:
print(f"Error: {e}")
# Custom error handling
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
这些示例演示了 int 在无效输入下的行为。safe_int 函数展示了如何实现优雅的后备方案。
在将用户输入或不受信任的数据转换为整数时,始终验证或处理异常。
带有 __int__ 的自定义对象
您可以通过实现 __int__ 特殊方法来使自定义对象与 int 一起使用。此示例创建了一个 Money 类。
class Money:
def __init__(self, dollars, cents):
self.dollars = dollars
self.cents = cents
def __int__(self):
return self.dollars
def __repr__(self):
return f"${self.dollars}.{self.cents:02d}"
m = Money(10, 99)
print(int(m)) # 10
Money 类实现了 __int__ 以返回其美元值。当我们在 Money 实例上调用 int 时,Python 会使用此方法。
此模式对于具有自然整数表示形式的对象(如货币金额、数量或计数)非常有用。
性能注意事项
此示例比较了 int 性能与替代转换方法和不同输入类型。
import timeit
def test_int_float():
return int(3.14)
def test_int_str():
return int("42")
def test_floor():
import math
return math.floor(3.14)
print("int(float):", timeit.timeit(test_int_float, number=1000000))
print("int(str):", timeit.timeit(test_int_str, number=1000000))
print("math.floor:", timeit.timeit(test_floor, number=1000000))
此基准测试不同的整数转换方法。对于直接数值转换,int 通常是最快的。字符串解析增加了开销。
对于浮点数截断,int 比 math.floor 快,但在负数情况下的行为不同。
最佳实践
- 用于类型转换: 在需要时将字符串/数字转换为整数
- 显式指定进制: 对于非十进制字符串,始终包含进制
- 处理错误: 当输入不确定时捕获 ValueError
- 实现 __int__: 对于具有整数表示形式的自定义对象
- 首选 int 而不是 eval: 更安全的字符串转换替代方案
资料来源
作者
列出所有 Python 教程。