ZetCode

Python int 函数

上次修改时间:2025 年 4 月 11 日

本综合指南探讨 Python 的 int 函数,该函数将值转换为整数。我们将介绍数值转换、进制处理、错误情况以及整数转换的实际示例。

基本定义

int 函数返回一个从数字或字符串构造的整数对象。它可以处理不同的数字进制并截断浮点数。

主要特点:将字符串/数字转换为整数,处理进制转换(2-36),截断浮点数(不四舍五入),并为无效输入引发 ValueError。

基本数值转换

以下是使用不同数值类型的简单用法,展示了 int 如何处理各种输入格式并截断浮点数。

basic_int.py
# 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 函数可以将字符串转换为整数,可以选择指定进制。此示例演示了各种字符串转换。

string_conversion.py
# 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。此示例展示了正确的错误处理技术。

error_handling.py
# 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 类。

custom_int.py
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 性能与替代转换方法和不同输入类型。

performance.py
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 通常是最快的。字符串解析增加了开销。

对于浮点数截断,intmath.floor 快,但在负数情况下的行为不同。

最佳实践

资料来源

作者

我叫 Jan Bodnar,是一位充满热情的程序员,拥有丰富的编程经验。 我从 2007 年开始撰写编程文章。 迄今为止,我撰写了 1,400 多篇文章和 8 本电子书。 我拥有超过十年的编程教学经验。

列出所有 Python 教程