
前言在Python编程语言中数字Number是最基本、最核心的数据类型之一。无论是简单的数值计算还是复杂的数据分析、科学计算数字类型都扮演着不可或缺的角色。Python3以其简洁、强大和灵活的特性在数字处理方面提供了丰富的支持和工具。本文将系统、全面地介绍Python3中的数字类型涵盖整数int、浮点数float、复数complex、布尔值bool等基本类型深入探讨它们的特点、运算、转换方法并结合实际应用场景介绍math、random、decimal、fractions等高级模块的使用。本文力求做到深入浅出、信息量大、结构清晰适合不同层次的Python开发者阅读。第一章 Python数字类型概述Python3支持多种数字类型每种类型都有其独特的用途和特性。理解这些类型是掌握Python数字处理的基础。1.1 数字类型的分类Python3 支持以下几种主要的数字类型整数int表示正整数、负整数和零没有大小限制。浮点数float表示带有小数部分的数值或使用科学计数法表示的数值。复数complex)由实数部分和虚数部分构成形式为a bj。布尔值bool)True和False是整数的子类型。此外Python还通过标准库提供了其他高级数字类型如decimal.Decimal用于高精度十进制运算。fractions.Fraction用于精确的有理数运算。1.2 数字类型的不可变性Python中的数字数据类型是**不可变immutable**的。这意味着一旦一个数字对象被创建它的值就不能被改变。如果对一个变量重新赋值实际上是在创建一个新的数字对象并让变量指向这个新对象而不是修改原有对象的值。a 100 id(a) # 获取a的内存地址 # 输出: 140735123456789 (示例) a 200 id(a) # 地址已改变说明创建了新对象 # 输出: 140735123456890 (示例)第二章 整数int详解整数类型是Python中最常用的数字类型之一。Python3中的整数类型非常强大支持任意大小的整数这是许多其他编程语言所不具备的特性。2.1 整数类型的特点任意精度Python3中的整数没有大小限制可以表示任意大的整数不会发生溢出。这使得Python非常适合处理大数运算例如加密算法、高精度计算等领域。big_num 1234567890123456789012345678901234567890 print(big_num ** 2) # 可以轻松进行超大整数运算多种进制表示整数可以用十进制、二进制、八进制和十六进制表示。十进制默认如100二进制以0b或0B开头如0b1010等于十进制10八进制以0o或0O开头如0o12等于十进制10十六进制以0x或0X开头如0xA等于十进制10布尔值是整数的子类型True等于1False等于0可以参与整数运算。2.2 整数的进制转换Python提供了内置函数用于整数之间的进制转换bin(x)将整数转换为二进制字符串以“0b”为前缀。oct(x)将整数转换为八进制字符串以“0o”为前缀。hex(x)将整数转换为十六进制字符串以“0x”为前缀。hex(123456) # 返回: 0x1e240 oct(0x1e240) # 返回: 0o361100 bin(0O361100) # 返回: 0b111100010010000002.3 整数的附加方法int类型除了基本运算外还提供了一些非常有用的附加方法bit_length()返回以二进制表示一个整数所需要的位数不包括符号位和前面的零。a -13 bin(a) # -0b1101 a.bit_length() # 4to_bytes()和from_bytes()这两个方法用于整数与字节串bytes之间的转换在网络编程、文件I/O、底层数据处理等场景中非常有用。# 整数转字节串大端序 a 1024 a.to_bytes(2, byteorderbig) # b\x04\x00 # 字节串转整数 int.from_bytes(b\x04\x00, byteorderbig) # 1024to_bytes方法的参数length整数字节数。byteorder字节顺序big表示大端序高位在前little表示小端序低位在前。signed是否使用二进制补码表示负数。第三章 浮点数float详解浮点数用于表示带有小数部分的数值是科学计算、数据分析、金融计算等领域的基础。3.1 浮点数的特点表示方式浮点数可以用小数形式或科学计数法表示。小数3.14、-0.001科学计数法1.23e5表示1.23 * 10^5 123000.0、2.5e-3表示0.0025精度问题浮点数在计算机内部以二进制表示这使得某些十进制小数无法被精确表示导致精度误差。这是所有使用IEEE 754标准的编程语言都会遇到的问题。print(0.1 0.2) # 输出: 0.300000000000000043.2 浮点数的精度问题与解决方案精度问题在金融计算、科学计算等对精度要求高的场景中是致命的。Python提供了多种解决方案方法一使用math.isclose()进行比较import math math.isclose(0.1 0.2, 0.3, rel_tol1e-9) # 返回 True方法二使用Decimal模块进行高精度计算decimal模块提供了Decimal类型用于高精度的十进制运算。from decimal import Decimal Decimal(0.1) Decimal(0.2) # 输出: Decimal(0.3)注意事项使用Decimal时应传入字符串而不是浮点数否则精度问题会再次引入。3.3 浮点数的附加方法float类型也提供了一些实用的附加方法as_integer_ratio()返回一对整数其比率正好等于原浮点数(3.14).as_integer_ratio() # (7070651414971679, 2251799813685248)is_integer()判断浮点数是否为整数。(3.0).is_integer() # True (3.14).is_integer() # False3.4 特殊的浮点数值inf和nanmath模块中定义了两个特殊的浮点数对象math.inf表示无穷大。math.nan表示“不是数字”Not a Number通常在运算结果无意义时产生如0/0。import math float(inf) # inf float(nan) # nan注意nan不等于任何数包括它自己。与nan的比较总是返回False。第四章 复数complex详解复数在科学计算和工程领域有广泛应用例如信号处理、电磁学、量子力学等。4.1 复数的定义与表示Python中的复数由实数部分real part和虚数部分imaginary part构成虚数单位用j或J表示。直接表示z 3 4j使用complex()构造z complex(3, 4)4.2 复数的属性与方法复数对象具有以下常用属性和方法z.real获取实部浮点数。z.imag获取虚部浮点数。z.conjugate()获取共轭复数虚部符号取反。z 3 4j print(z.real) # 3.0 print(z.imag) # 4.0 print(z.conjugate()) # (3-4j)4.3 复数的运算复数支持基本的算术运算如加法、减法、乘法、除法。z1 2 3j z2 1 - 2j print(z1 z2) # (31j) print(z1 * z2) # (8-1j) 因为 (23j)*(1-2j) 2 -4j 3j -6j^2 2 -j 6 8 - j注意复数不支持比较运算符如、但可以判断是否相等。第五章 布尔值bool详解布尔值是Python中一个特殊的数据类型用于表示逻辑上的“真”和“假”。5.1 布尔值的特点True和False是 Python3 中的关键字分别是int类型的子类bool的唯一实例。issubclass(bool, int)返回True。在数值上下文中True被当作1False被当作0。True 1 # 2 False * 5 # 05.2 布尔值的应用场景条件判断用于if、while等控制流语句。数据过滤在数据分析中使用布尔序列布尔掩码对数据进行高效过滤。二分类标签在机器学习中常使用0和1或True和False表示类别。5.3 布尔值的陷阱由于bool是int的子类型在类型转换和计算时需注意陷阱。print(True 3) # 4隐式转换为int print(3 * False) # 0第六章 数字类型转换在实际编程中我们经常需要在不同数字类型之间进行转换。Python提供了多种显式和隐式的转换方式。6.1 显式转换使用内置函数进行显式转换是最安全、最可控的方式。int(x)将x转换为整数。如果x是浮点数则截断小数部分。float(x)将x转换为浮点数。complex(x, y)将x和y转换为复数实部为x虚部为y。bool(x)将x转换为布尔值。int(3.14) # 3 float(5.67) # 5.67 complex(2, 3) # (23j) bool(0) # False bool(1) # True bool(Hello) # True (非空字符串为True)6.2 隐式转换当不同数字类型混合运算时Python会自动进行类型提升将较简单的类型转换为较复杂的类型以避免数据丢失。int float→floatint complex→complexfloat complex→complexbool参与数值运算时被视为int(True1,False0)3 4.5 # 7.5 (float) 2 34j # (54j) (complex) True 3 # 4 (int)第七章 数字运算全解Python提供了丰富的运算符和内置函数用于进行各种数字运算。7.1 算术运算符运算符描述示例结果加法5 38-减法5 - 32*乘法5 * 315/除法总是返回浮点数5 / 31.666...//整除向下取整5 // 31%取模求余数5 % 32**幂运算5 ** 3125重要注意在Python3中/运算总是返回浮点数即使能整除。//运算返回向下取整的结果其类型与操作数有关。7 // 2 # 3 7.0 // 2 # 3.0浮点数运算结果在不同机器上可能略有差异。7.2 赋值运算符运算符描述示例等价于简单赋值c a b加法赋值c ac c a-减法赋值c - ac c - a*乘法赋值c * ac c * a/除法赋值c / ac c / a%取模赋值c % ac c % a**幂赋值c ** ac c ** a//整除赋值c // ac c // a7.3 比较运算符比较运算符返回布尔值True或False。运算符描述等于!不等于大于小于大于等于小于等于7.4 位运算符位运算符用于对整数的二进制位进行操作。运算符描述示例按位与5 3→10101 0011 0001按位或^按位异或5 ^ 3→60101 ^ 0011 0110~按位取反~5→-60101 取反为 1010即 -6左移5 1→100101 左移1位为 1010右移5 1→20101 右移1位为 00107.5 运算符优先级以下按优先级从高到低列出常见运算符**指数~ -取反、一元正、一元负* / % //乘、除、取余、整除 -加、减 位右移、位左移按位与^ |按位异或、按位或 !比较运算符 % / // - * **赋值运算符is, is not身份运算符in, not in成员运算符not and or逻辑运算符建议当不确定优先级时使用括号()明确运算顺序这也能提高代码可读性。7.6 常用内置数学函数Python提供了一些内置的数学函数无需导入任何模块即可使用。函数描述示例abs(x)绝对值abs(-5)→5round(x, n)四舍五入到n位小数round(3.14159, 2)→3.14pow(x, y)返回x的y次方pow(2, 3)→8max(x1, x2, ...)返回最大值max(1, 2, 3)→3min(x1, x2, ...)返回最小值min(1, 2, 3)→1divmod(x, y)返回商和余数divmod(7, 2)→(3, 1)sum(iterable)求和sum([1, 2, 3])→6第八章math模块详解math模块是Python标准库中最常用的数学模块提供了大量的数学函数和常量。8.1 数学常量math.pi圆周率 π约 3.141592653589793math.e自然常数 e约 2.718281828459045math.tauτ等于 2π约 6.283185307179586math.inf正无穷大浮点数math.nan非数字浮点数8.2 常用数学函数数值运算函数函数描述示例math.ceil(x)向上取整math.ceil(3.2)→4math.floor(x)向下取整math.floor(3.9)→3math.trunc(x)截断取整同int()math.trunc(3.9)→3math.fabs(x)浮点数绝对值math.fabs(-5)→5.0math.factorial(x)阶乘math.factorial(5)→120math.gcd(a, b)最大公约数math.gcd(12, 8)→4math.fmod(x, y)取模浮点数专用math.fmod(7, 2)→1.0math.remainder(x, y)余数IEEE 754标准math.remainder(7, 2)→-1.0幂和对数函数函数描述示例math.exp(x)返回 e 的 x 次方math.exp(1)→2.718...math.log(x, base)对数base可选默认自然对数math.log(100, 10)→2.0math.log10(x)以10为底的对数math.log10(100)→2.0math.log2(x)以2为底的对数math.log2(8)→3.0math.pow(x, y)返回 x 的 y 次方与内置pow()不同结果总是浮点数math.pow(2, 3)→8.0math.sqrt(x)平方根math.sqrt(16)→4.0三角函数函数描述示例math.sin(x)正弦x 为弧度math.sin(math.pi/2)→1.0math.cos(x)余弦math.cos(0)→1.0math.tan(x)正切math.tan(math.pi/4)→1.0math.asin(x)反正弦math.asin(1.0)→π/2math.acos(x)反余弦math.acos(0)→π/2math.atan(x)反正切math.atan(1.0)→π/4math.atan2(y, x)返回 y/x 的反正切考虑象限math.atan2(1, 0)→π/2math.degrees(x)弧度转角度math.degrees(math.pi)→180.0math.radians(x)角度转弧度math.radians(180)→π双曲函数math.sinh(x)、math.cosh(x)、math.tanh(x)、math.asinh(x)、math.acosh(x)、math.atanh(x)特殊函数函数描述math.erf(x)误差函数math.erfc(x)互补误差函数math.gamma(x)Gamma函数math.lgamma(x)Gamma函数的自然对数math.isclose(a, b, rel_tol, abs_tol)判断两个浮点数是否在容差范围内相等8.3math模块实战示例import math # 计算圆的面积 radius 5.0 area math.pi * radius ** 2 print(f半径为{radius}的圆面积为: {area:.2f}) # 78.54 # 判断两个浮点数是否近似相等 a, b 0.1 0.2, 0.3 print(fa {a}, b {b}) print(fa b: {a b}) # False print(fmath.isclose(a, b): {math.isclose(a, b)}) # True第九章random模块详解随机数在游戏开发、模拟、统计学、密码学等领域有广泛应用。Python的random模块提供了功能丰富的随机数生成函数。9.1 核心随机函数函数描述示例random.random()返回[0, 1)范围内的随机浮点数random.random()→0.374...random.uniform(a, b)返回[a, b]范围内的随机浮点数random.uniform(1, 10)→5.673...random.randint(a, b)返回[a, b]范围内的随机整数包含两端random.randint(1, 6)→3random.randrange(start, stop, step)从指定范围可指定步长的集合中选一个随机数random.randrange(0, 100, 5)→25random.choice(seq)从序列中随机选择一个元素random.choice([红, 绿, 蓝])→绿random.choices(population, weights, k)从序列中随机选择k个元素可带权重random.choices([A,B,C], weights[1,2,3], k2)random.shuffle(lst)随机打乱列表顺序原地操作random.shuffle([1](ref)[2](ref)[3](ref)[4](ref)→[3,1,4,2]random.sample(population, k)从序列中随机抽取k个不重复的元素random.sample([1,2,3,4,5], 3)→[2,5,1]9.2 种子Seed控制random.seed(x)用来初始化随机数生成器的种子。种子相同生成的随机数序列也相同这在需要可重复结果的场景下非常有用如调试、测试。import random random.seed(42) print(random.random()) # 0.6394... print(random.random()) # 0.0250... random.seed(42) # 重置种子 print(random.random()) # 0.6394... (与第一次相同)9.3 随机数应用实战import random # 模拟掷骰子 dice_result random.randint(1, 6) print(f掷骰子结果: {dice_result}) # 生成随机验证码6位数字 captcha .join(random.choices(0123456789, k6)) print(f验证码: {captcha}) # 从列表中随机抽取幸运观众 participants [Alice, Bob, Charlie, David] winners random.sample(participants, 2) print(f幸运观众: {winners}) # 随机打乱列表洗牌 cards [2, 3, 4, 5, 6, 7, 8, 9, 10, J, Q, K, A] * 4 random.shuffle(cards) print(f洗牌后前5张: {cards[:5]})第十章decimal模块详解10.1 为什么需要decimal模块如前所述浮点数存在精度问题。在金融计算、货币计算、科学计算中对精度要求很高的场景下decimal模块提供了解决方案。10.2 基本用法Decimal是decimal模块的核心类。创建Decimal对象时建议传入字符串而不是浮点数。from decimal import Decimal, getcontext d1 Decimal(0.1) d2 Decimal(0.2) print(d1 d2) # 精确输出: 0.310.3 设置精度使用getcontext()可以获取和设置当前上下文context包括精度、舍入模式等。from decimal import Decimal, getcontext, ROUND_HALF_UP # 设置精度为4位有效数字 getcontext().prec 4 a Decimal(1.23456) b Decimal(2.34567) print(a * b) # 结果将保留4位有效数字: 2.895 # 设置舍入模式为“四舍五入” getcontext().rounding ROUND_HALF_UP print(Decimal(2.345).quantize(Decimal(0.01))) # 2.3510.4 实战银行账户余额操作from decimal import Decimal class BankAccount: def __init__(self, initial_balance0.00): self.balance Decimal(initial_balance) def deposit(self, amount): amount Decimal(amount) if amount 0: raise ValueError(存款金额必须为正) self.balance amount print(f存款成功当前余额{self.balance}) def withdraw(self, amount): amount Decimal(amount) if amount 0: raise ValueError(取款金额必须为正) if amount self.balance: raise ValueError(余额不足) self.balance - amount print(f取款成功当前余额{self.balance}) account BankAccount(1000.00) account.deposit(500.00) # 余额: 1500.00 account.withdraw(300.00) # 余额: 1200.00第十一章fractions模块详解11.1 什么是有理数有理数是可以表示为两个整数之比分数的数。fractions模块提供了Fraction类来表示有理数并支持精确运算。11.2 基本用法from fractions import Fraction # 方式1直接传入分子和分母 a Fraction(1, 3) # 1/3 # 方式2传入字符串 b Fraction(2/6) # 自动约分为 1/3 # 方式3传入浮点数可能不精确 c Fraction(0.1) # 3602879701896397/3602879701896396811.3 运算a Fraction(1, 3) b Fraction(2, 5) print(a b) # 11/15 print(a * b) # 2/15 print(a / b) # 5/611.4 属性和方法f Fraction(4, 6) print(f.numerator) # 2 (分子已约分) print(f.denominator) # 3 (分母已约分) print(f.limit_denominator(10)) # 返回一个分母不超过10的近似值第十二章 数字类型在数据分析中的应用在数据分析领域Python的NumPy和Pandas库提供了更高效、更强大的数字类型支持。12.1 使用NumPy优化内存原生Python的int类型每个占用28字节而NumPy的int8只占用1字节。import numpy as np import sys print(sys.getsizeof(100)) # 28 (原生int) arr np.array([1, 2, 3], dtypenp.int8) print(arr.itemsize) # 1 (每个元素1字节) print(arr.nbytes) # 3 (总共3字节)12.2 性能提升NumPy的向量化运算比原生Python循环快数十倍甚至上百倍。场景原生PythonNumPy优化性能提升100万次加法运算78ms1.2ms65x布尔过滤100万条数据210ms0.8ms260x12.3 在Pandas中的类型指定import pandas as pd import numpy as np # 指定整数类型避免自动推断为float df pd.DataFrame({ id: pd.Series([1, 2, 3], dtypeInt64), # 可空整数类型 score: pd.Series([85.5, 90.0, 78.3], dtypefloat32) })第十三章 常见陷阱与最佳实践13.1 浮点数相等比较陷阱永远不要直接使用比较浮点数是否相等。最佳实践使用math.isclose()或比较差值是否在容忍范围内。# 错误方式 if 0.1 0.2 0.3: # False # 正确方式 if abs((0.1 0.2) - 0.3) 1e-9: # True # 或 if math.isclose(0.1 0.2, 0.3): # True13.2 整数与浮点数运算陷阱/除法的结果总是浮点数即使能整除。最佳实践如需整数结果使用//或int()转换。13.3 使用Decimal的字符串参数陷阱使用浮点数创建Decimal对象会引入精度问题。最佳实践始终使用字符串创建Decimal。# 错误 Decimal(0.1) # Decimal(0.1000000000000000055511151231257827021181583404541015625) # 正确 Decimal(0.1) # Decimal(0.1)13.4 布尔值与数值混用陷阱布尔值参与算术运算时会被视为0或1。最佳实践除非明确需要否则避免将布尔值直接用于数值计算使用显式转换或逻辑判断。13.5 类型判断最佳实践判断变量类型时优先使用isinstance()而不是type()因为isinstance()支持继承关系。# 推荐 isinstance(True, int) # True # 不推荐 type(True) int # False (因为type(True)是bool)第十四章 总结本文全面深入地介绍了Python3中的数字类型涵盖了以下几个核心方面基本数字类型整数int、浮点数float、复数complex、布尔值bool的定义、特性和用法。数字运算算术运算符、赋值运算符、比较运算符、位运算符的详细说明以及运算符优先级。类型转换显式转换和隐式转换的规则与最佳实践。高级模块math模块提供丰富的数学函数和常量。random模块提供多种随机数生成功能。decimal模块实现高精度十进制运算。fractions模块支持精确的有理数运算。性能优化在数据分析场景下使用NumPy和Pandas优化数字处理的性能。常见陷阱与最佳实践浮点数比较、精度处理、类型判断等方面的注意事项。掌握这些知识你将能够更自信地处理各种数值计算任务。避免常见的精度问题和类型转换陷阱。在需要时选择合适的数字类型和模块。优化代码性能提升数据分析效率。编写更健壮、更专业的Python代码。附录速查表项目说明整数int任意精度支持多种进制表示True/False是其子类型浮点数float64位双精度存在精度问题科学计数法表示复数complexa bj形式z.real、z.imag、z.conjugate()布尔值boolTrue/Falseint的子类型True1、False0进制转换bin()、oct()、hex()类型转换int()、float()、complex()、bool()高精度计算decimal.Decimal金融、fractions.Fraction有理数数学运算math模块sqrt、sin、cos、ceil、floor、factorial等随机数random模块random、randint、choice、shuffle、sample等性能优化numpy向量化运算、pandas高效数据框操作判断类型isinstance(x, int)比type(x) int更推荐