type
status
date
slug
summary
tags
category
icon
password
📝 数字类型---int,float,complex
1、内置类型 int
1.1、基本语法
x
:要转换为整数的对象(字符串、数字等)。
base
:可选参数,表示进制(默认为10),范围是 2 ≤ base ≤ 36。
1.2、构造方法详解
(1) 从整数构造
如果 x 已经是整数,直接返回其值:
(2) 从浮点数构造
截取浮点数的整数部分(向下取整,非四舍五入):
(3) 从字符串构造
字符串可以是十进制或其他进制的数字表示,需符合 base 的规则。
- 十进制字符串(默认
base=10
):
- 二进制(
base=2
):
- 八进制(
base=8
):
- 十六进制(
base=16
):
- 三十六进制(
base=36
):
前缀自动识别(
base=0
):如果 base=0
,字符串的前缀会被自动解析0b
或0B
→ 二进制
0o
或0O
→ 八进制
0x
或0X
→ 十六进制
- 无前缀 → 十进制
无效字符串会报错:
(4) 从布尔值构造
- 布尔值
True
和False
分别对应 1 和 0:
(5) 从其他类型构造
任何定义了
__int__()
或 __index__()
方法的对象均可被转换:__int__()
(旧方法,已不推荐):
__index__()
(推荐,用于切片、位运算等):
1.3、错误处理
- 无效输入:
- 超出进制范围:
1.4、进制转换
- int() 转成十进制:int 可以将数字字符串和 Number 类型的值转成整数
- bin() 其他进制数转二进制
- oct() 其他进制转成八进制
- hex() 其他进制转成十六进制
2、内置类型 float
2.1、基本语法
- 仅有一个位置参数 x,可以是数字、字符串、实现了 \\float\\() 的对象,或干脆不传(返回 0.0)。
- 没有 base 参数;进制转换只能先转成整数再除以幂次,或借助 decimal / fractions。
2.2、按输入来源分类
(1) 从整数构造
- 任意大小的 int 都能转换(Python 的 int 是无限精度),但最终会被截断到 53 bit 有效数字。
(2) 从浮点数构造
- 如果 x 已经是 float,直接返回同一对象(CPython 实现下的 C 级优化)。
(3) 从字符串构造
- 十进制:支持科学计数法、正负号、前导 / 尾随空格、下划线(PEP 515)
- 十六进制浮点(PEP 754 / C99 风格):
- NaN 字符串变体:
- 非法格式 →
ValueError
(4) 从布尔值构造
(5) 从
Decimal
、Fraction
构造decimal.Decimal
→ 精确到二进制浮点的最近可表示值:
fractions.Fraction
→ 同样先转成有理数再近似:
(6) 从实现了
__float__()
的自定义对象2.3、特殊值与边界行为
字面量 / 字符串 | Python 结果 | 注解 |
float("inf") / float("INF") | math.inf | 正无穷 |
float("-Infinity") | -math.inf | 负无穷 |
float("nan") / float("NAN") | math.nan | Not-a-Number |
溢出整数 | 自动转为 inf | float(10**400) → inf |
下溢整数 | 自动转为 0.0 | float(10**-400) → 0.0 |
2.4、错误与异常
触发场景 | 异常类型 | 示例 |
非法字符串 | ValueError | float("1.2.3") |
非字符串且无 __float__ | TypeError | float([1, 2]) |
复合对象缺方法 | TypeError | float(object()) |
2.5、常见精度与比较陷阱
- 无法精确表示的十进制小数
- 推荐比较方法:使用 Decimal 或 fractions.Fraction 做金融运算。
3、complex
:“实部+虚部”的复数类型,写作 a + bj
(j 表示虚数单位),支持加减乘除、共轭、模等运算
4、所有数字类型(复数除外)都支持下列运算
运算 | 结果 | 备注 | 完整文档 |
x + y | x 和 y 的和 | — | — |
x - y | x 和 y 的差 | — | — |
x * y | x 和 y 的乘积 | — | — |
x / y | x 和 y 的商 | — | — |
x // y | x 和 y 的商数 | (1)(2) | — |
x % y | x / y 的余数 | (2) | — |
\-x | x 取反 | — | — |
+x | x 不变 | — | — |
abs(x) | x 的绝对值或大小 | — | abs() |
int(x) | 将 x 转换为整数 | (3)(6) | int() |
float(x) | 将 x 转换为浮点数 | (4)(6) | float() |
complex(re, im) | 一个带有实部 re 和虚部 im 的复数;im 默认为 0 | (6) | complex() |
c.conjugate() | 复数 c 的共轭 | — | — |
divmod(x, y) | (x // y, x % y) | (2) | divmod() |
pow(x, y) | x 的 y 次幂 | (5) | pow() |
x \\ y | x 的 y 次幂 | (5) | — |
4.1、/
(普通除法,浮点除法)
/
运算符进行的是普通除法,结果总是浮点数(即使是整数除法,也会返回浮动的结果)。4.2、//
(地板除法,整数除法)
//
运算符进行的是地板除法(又称整数除法),返回商的整数部分,向下取整。即使操作数是浮点数,结果也会是整数(或接近整数的浮动值,取决于类型)。5、所有numbers.Real 类型 (int 和float) 还包括下列运算:
运算 | 结果 |
math.trunc(x) | x 截断为 Integral |
round(x\[, n]) | x 舍入到 n 位小数,半数值会舍入到偶数;若省略 n,默认为 0 |
math.floor(x) | ≤ x 的最大 Integral |
math.ceil(x) | ≥ x 的最小 Integral |
📝 布尔类型---bool
1、代表真值的布尔对象,bool 类型只有两个常量实例: True 和 False。
2、内置函数bool() 可将任意值转换为布尔值,如果该值可以被解读为逻辑值的话。
3、转换
整数0、空字符串、空列表、空元组、空字典转换为布尔值时均为False,其他均为True