在 Python 3 中,数字(Number)是不可变数据类型。Python 提供了四种数字类型,涵盖了从基础计数到复杂科学计算的方方面面。
以下是 Python 3 数字类型的全面解析:
1. 整数 (int)
在 Python 3 中,整数类型只有 int,不再有 Python 2 中的 long 类型。
- 最大特点:Python 3 的
int支持任意精度,它的大小仅受限于你计算机的可用内存。这意味着你可以计算几百位的超大整数而不会发生溢出。
# 基本整数
a = 100
b = -50
# 超大整数 (自动处理,不会溢出)
big_num = 2 ** 100
print(big_num) # 1267650600228229401496703205376
# 不同进制的表示法
bin_num = 0b1010 # 二进制 (以 0b 开头) -> 十进制 10
oct_num = 0o12 # 八进制 (以 0o 开头) -> 十进制 10
hex_num = 0xA # 十六进制 (以 0x 开头) -> 十进制 10
# 进制转换函数
print(bin(10)) # '0b1010'
print(oct(10)) # '0o12'
print(hex(10)) # '0xa'2. 浮点数 (float)
浮点数用于表示带有小数点的数字。在 Python 中,它底层对应 C 语言的双精度浮点数(double)。
f1 = 3.14
f2 = -0.05
f3 = 1.2e3 # 科学计数法,等同于 1.2 * 10^3 = 1200.0⚠️ 核心避坑:浮点数精度问题
由于计算机底层使用二进制表示浮点数,某些十进制小数无法被精确的二进制小数表示,从而导致精度丢失。
print(0.1 + 0.2) # 输出: 0.30000000000000004 (不是精确的 0.3!)
print(0.1 + 0.2 == 0.3) # 输出: False
# ✅ 正确比较浮点数的方法:使用 math.isclose()
import math
print(math.isclose(0.1 + 0.2, 0.3)) # 输出: True
# ✅ 需要绝对精确的场景(如金融计算):使用 decimal 模块
from decimal import Decimal
d1 = Decimal('0.1') # 注意:传入字符串而不是浮点数
d2 = Decimal('0.2')
print(d1 + d2) # 输出: 0.3特殊浮点值
import math
inf_val = float('inf') # 正无穷大
neg_inf = float('-inf') # 负无穷大
nan_val = float('nan') # Not a Number (非数字)
print(math.isinf(inf_val)) # True
print(math.isnan(nan_val)) # True3. 复数 (complex)
复数由实部和虚部组成,在 Python 中虚数单位用 j 或 J 表示(而不是数学中的 i,以避免与变量 i 混淆)。
c1 = 3 + 4j
c2 = complex(3, 4) # 使用 complex() 函数创建
# 获取实部和虚部
print(c1.real) # 3.0 (注意返回的是浮点数)
print(c1.imag) # 4.0
# 获取共轭复数 (实部相同,虚部符号相反)
print(c1.conjugate()) # (3-4j)
# 复数运算
c3 = (1 + 2j) + (3 + 4j) # (4+6j)
c4 = (1 + 2j) * (3 + 4j) # (-5+10j)4. 布尔值 (bool)
布尔值是整数的子类。True 等价于 1,False 等价于 0。
print(issubclass(bool, int)) # 输出: True (bool 确实是 int 的子类)
print(True + True) # 输出: 2 (1 + 1)
print(True * 5) # 输出: 5 (1 * 5)
print(False + 10) # 输出: 10 (0 + 10)
# 在统计列表中 True 的个数时非常有用
my_list = [True, False, True, True, False]
print(sum(my_list)) # 输出: 35. 常用内置数学函数
Python 提供了一些无需导入模块即可使用的内置数学函数:
x = -3.14159
print(abs(x)) # 3.14159 (绝对值)
print(round(x, 2)) # -3.14 (四舍五入到小数点后 2 位)
print(round(x)) # -3 (四舍五入到整数。注意:Python 3 使用“银行家舍入法”,即四舍六入五成双)
print(max(1, 5, 3)) # 5 (最大值)
print(min(1, 5, 3)) # 1 (最小值)
print(pow(2, 3)) # 8 (2 的 3 次方,等同于 2 ** 3)
print(pow(2, 3, 3)) # 2 (2 的 3 次方,再对 3 取模,即 8 % 3)
# divmod: 同时返回商和余数
quotient, remainder = divmod(10, 3)
print(quotient, remainder) # 3 16. math 模块 (高级数学运算)
对于更复杂的数学运算(如三角函数、对数、阶乘等),需要导入内置的 math 模块。
import math
# 常用常量
print(math.pi) # 3.141592653589793
print(math.e) # 2.718281828459045
# 取整函数
print(math.ceil(3.1)) # 4 (向上取整)
print(math.floor(3.9)) # 3 (向下取整)
# 其他常用函数
print(math.sqrt(16)) # 4.0 (平方根)
print(math.factorial(5))# 120 (阶乘: 5!)
print(math.log(100, 10))# 2.0 (以 10 为底 100 的对数)
print(math.sin(math.pi / 2)) # 1.0 (正弦函数,参数是弧度)7. 数字的格式化输出 (f-string 进阶)
在打印数字时,使用 f-string 可以轻松实现各种格式化需求:
num = 1234567.89123
# 1. 千分位分隔符
print(f"{num:,}") # 1,234,567.89123
# 2. 保留小数位数 (四舍五入)
print(f"{num:.2f}") # 1234567.89
# 3. 百分比格式
ratio = 0.856
print(f"{ratio:.1%}") # 85.6%
# 4. 指定宽度和对齐 (常用于打印表格)
for i in range(1, 4):
# 宽度为 5,右对齐
print(f"Number: {i:5d} | Square: {i**2:5d}")
# 输出:
# Number: 1 | Square: 1
# Number: 2 | Square: 4
# Number: 3 | Square: 9
# 5. 格式化进制
val = 255
print(f"Binary: {val:b}") # Binary: 11111111
print(f"Hex: {val:x}") # Hex: ff
print(f"Octal: {val:o}") # Octal: 377💡 核心总结与避坑指南
- 整除
//的陷阱://是向下取整(向负无穷方向),而不是直接截断小数。
7 // 3结果是2。-7 // 3结果是-3(因为 -2.33 向下取整是 -3),而不是-2。
- 浮点数比较:永远不要用
==来比较两个浮点数,请使用math.isclose(a, b)。 - 大数计算:Python 原生支持大整数运算,不需要像 Java 那样使用
BigInteger类。 - 类型转换:
int()转换浮点数时是直接截断小数部分(向零取整),int(3.9)是3,int(-3.9)是-3。
如果你想了解 Python 中如何进行更高级的数学计算(例如使用 NumPy 进行矩阵运算),或者对 decimal 模块的精度控制有疑问,可以随时告诉我!