int()
是 Python 内置的用于将数据转换为整数的函数。它功能强大且灵活,支持多种输入类型和进制转换。以下是关于 int()
的详细解析和实战案例。
一、基本语法
int(x=0, base=10)
- 参数:
x
(可选):要转换的对象(如字符串、浮点数等),默认为0
。base
(可选):进制数,范围为 2~36,仅当x
为字符串时有效,默认值为 10。
二、核心功能与示例
1. 将字符串转换为整数
# 十进制字符串
print(int("123")) # 输出: 123
print(int("-456")) # 输出: -456
# 其他进制字符串(需指定 base)
print(int("101", base=2)) # 二进制 → 输出: 5
print(int("FF", base=16)) # 十六进制 → 输出: 255
print(int("120", base=8)) # 八进制 → 输出: 80
2. 将浮点数转换为整数
print(int(3.14)) # 输出: 3(直接截断小数部分)
print(int(-2.7)) # 输出: -2(向零取整)
3. 布尔值转换为整数
print(int(True)) # 输出: 1
print(int(False)) # 输出: 0
4. 自定义对象转换(通过 __int__
方法)
class Number:
def __int__(self):
return 42
num = Number()
print(int(num)) # 输出: 42
三、高级用法
1. 处理非标准进制字符串
# 二进制字符串(带前缀)
print(int("0b1010", base=2)) # 输出: 10
print(int("0B1010", base=2)) # 输出: 10
# 十六进制字符串(带前缀)
print(int("0xFF", base=16)) # 输出: 255
2. 进制转换实战
# 十进制转二进制字符串
binary_str = bin(255)[2:] # 输出: '11111111'
# 二进制字符串转回十进制
decimal = int(binary_str, base=2) # 输出: 255
# 任意进制互转(如十进制转十六进制)
hex_str = hex(255) # 输出: '0xff'
decimal = int(hex_str, 16) # 输出: 255
3. 处理大整数
# Python 支持任意精度的整数
large_num = int("1" * 100) # 100个1组成的字符串
print(large_num) # 输出: 111111111111111111111111111111111111111111111111111111111111111111111111111111
四、常见错误与陷阱
1. 字符串格式与进制不匹配
# 错误示例:字符串包含非法字符
int("12A", base=10) # 报错:ValueError: invalid literal for int() with base 10: '12A'
# 正确示例:16进制包含字母A
int("12A", base=16) # 输出: 298
2. 非字符串类型指定 base
int(123, base=10) # 报错:TypeError: int() can't convert non-string with explicit base
3. 浮点数字符串直接转换
int("3.14") # 报错:ValueError: invalid literal for int() with base 10: '3.14'
# 正确做法:先转浮点数,再转整数
int(float("3.14")) # 输出: 3
五、实战案例
1. 解析配置文件中的数字
config = {
"port": "8080", # 字符串形式的数字
"timeout": "30",
"debug": "True"
}
# 转换为正确的类型
port = int(config["port"]) # 转换为整数
timeout = int(config["timeout"])
debug = config["debug"] == "True" # 转换为布尔值
2. 实现进制转换器
def convert_base(number_str, from_base, to_base):
"""将一个进制的字符串转换为另一个进制的字符串"""
decimal = int(number_str, base=from_base)
if to_base == 2:
return bin(decimal)[2:]
elif to_base == 8:
return oct(decimal)[2:]
elif to_base == 16:
return hex(decimal)[2:]
else:
return str(decimal)
# 示例:二进制转十六进制
print(convert_base("101010", 2, 16)) # 输出: '2a'
3. 处理字节数据(如网络协议解析)
# 将字节数据转换为整数
byte_data = b'\x01\x02' # 对应整数 258
num = int.from_bytes(byte_data, 'big') # 输出: 258
# 将整数转换为字节
byte_data = (258).to_bytes(2, 'big') # 输出: b'\x01\x02'
六、最佳实践
-
显式指定进制:
# 推荐:明确指定进制 int("101", base=2) # 避免误解为十进制 # 不推荐:依赖默认值 int("101") # 默认按十进制处理
-
异常处理:
try: num = int("abc") except ValueError: print("无法转换为整数")
-
结合类型检查:
def process_number(value): if isinstance(value, str): return int(value) elif isinstance(value, float): return int(value) else: raise TypeError("不支持的类型")
七、总结
int()
函数是 Python 中类型转换的重要工具,不仅能处理常见的数值转换,还支持进制间的灵活转换。掌握其参数和边界情况,能帮助你在数据处理、算法实现等场景中更加得心应手。