精通 Python 数字、类型转换与数学运算
精通 Python 数字、类型转换与数学运算
探索 Python 如何处理数值数据、类型转换的细节,以及可用于日常编程的强大数学工具。
Python 中的数字数据类型
Python 将数字分为三种核心类型:int(整数)、float(浮点数,带小数部分)和 complex(复数,含实部和虚部)。小数点的存在区分 int 与 float(如 5 是整数,5.0 是浮点数)。复数采用 x + yj 表示法,其中 x 为实部,y 为虚部。
使用 type() 查看值的类,用 isinstance() 验证类型成员身份。例如:
a = 5
print(type(a))
print(type(5.0))
c = 5 + 3j
print(c + 3)
print(isinstance(c, complex))
输出:
<class 'int'> <class 'float'> (8+3j) True
Python 整数具有任意精度;浮点数保留约 15 位十进制精度。对于二进制、十六进制或八进制表示,Python 提供便捷前缀:
| 进制 | 前缀 |
|---|---|
| 二进制 | 0b 或 0B |
| 八进制 | 0o 或 0O |
| 十六进制 | 0x 或 0X |
示例:
# 输出: 107
print(0b1101011)
# 输出: 253 (251 + 2)
print(0xFB + 0b10)
# 输出: 13
print(0o15)
结果:
107 253 13
类型转换(强制转换)
当浮点数参与运算时,Python 会自动将整数提升为浮点数。例如:
>>> 1 + 2.0
3.0
显式转换同样简单,使用 int()、float()、complex(),它们也能解析字符串:
>>> int(2.3)
2
>>> int(-2.8)
-2
>>> float(5)
5.0
>>> complex('3+5j')
(3+5j)
将浮点数转为整数时,Python 会截断小数部分而非四舍五入。
Python Decimal 模块
浮点运算因二进制表示限制可能产生意外结果。例如:
>>> (1.1 + 2.2) == 3.3
False
因为 0.1 等数字无法在二进制中精确表示,运算会产生微小舍入误差。decimal 模块提供任意精度十进制运算来缓解此问题:
import decimal
print(0.1)
print(decimal.Decimal(0.1))
输出:
0.1 0.1000000000000000055511151231257827021181583404541015625
使用 Decimal 保留有效数字和精确十进制表示,这对财务计算至关重要:
from decimal import Decimal as D
print(D('1.1') + D('2.2'))
print(D('1.2') * D('2.50'))
输出:
3.3 3.000
因十进制运算比二进制浮点慢,仅在需精确精度的场景(如货币值、可配置精度、有效数字控制)使用 Decimal。
何时使用 Decimal 而非 Float?
- 要求精确十进制表示的金融或货币应用。
- 需显式控制精度的场景。
- 要求十进制有效位概念的应用。
Python Fractions 模块
fractions 模块提供有理数支持,支持以整数分子分母进行精确运算:
import fractions
print(fractions.Fraction(1.5))
print(fractions.Fraction(5))
print(fractions.Fraction(1,3))
输出:
3/2 5 1/3
从浮点数创建 Fraction 因二进制舍入可能产生反直觉结果,建议对十进制数使用字符串输入:
import fractions
# 从浮点数
print(fractions.Fraction(1.1))
# 从字符串
print(fractions.Fraction('1.1'))
输出:
2476979795053773/2251799813685248 11/10
分数支持所有算术运算符:
from fractions import Fraction as F
print(F(1, 3) + F(1, 3))
print(1 / F(5, 6))
print(F(-3, 10) > 0)
print(F(-3, 10) < 0)
输出:
2/3 6/5 False True
Python 数学模块
Python 的 math 模块提供三角、对数、阶乘等函数:
import math
print(math.pi)
print(math.cos(math.pi))
print(math.exp(10))
print(math.log10(1000))
print(math.sinh(1))
print(math.factorial(6))
输出:
3.141592653589793 -1.0 22026.465794806718 3.0 1.1752011936438014 720
对于随机性和采样,random 模块提供:
import random
print(random.randrange(10, 20))
x = ['a', 'b', 'c', 'd', 'e']
print(random.choice(x))
random.shuffle(x)
print(x)
print(random.random())
示例输出(值会变化):
18 e ['c', 'e', 'd', 'b', 'a'] 0.5682821194654443
两个模块均提供完整文档,详述所有可用函数和属性。
Python