Python内置函数大全:68个built-in函数速查与分类
全面梳理Python官方标准命名空间中的全部68个built-in内置函数。按照数学计算、类型转换、容器结构、迭代处理、反射内省等十大核心维度系统分类,提供参数说明、对比解析、使用规范与避坑建议。
import 声明即可直接调用的内置函数(Built-in Functions)。在 Python 官方规范的标准全局命名空间中,完整维护着 68 个核心内置函数。它们直接由底层的 builtins 模块导出,支撑了从最基础的数值运算、集合操作,到高阶迭代、类属性反射与运行时动态代码执行的全套语言特性。本文将这 68 个内置函数按实际工程职责划分为 10 大核心类别,逐一提供签名功能说明、典型实战范例与高频边界避坑指导。
一、68个内置函数十大分类矩阵总览
为了让查询与记忆更具条理性,本文摒弃按照首字母顺序罗列的机械方式,而是根据它们在 Python 开发任务中的底层角色,将 68 个函数解构成 10 个功能明确的模块。
每一个分类都对应着 Python 语言机制的一个专门侧面:
- 数学与数值计算(7个):处理算术取值、除法余数、极值定位与精度四舍六入。
- 数据类型与构造转换(13个):负责标量类型构建、进制转换与字节缓冲区内存视图。
- 数据结构与容器操作(13个):包含列表、元组、字典、集合构造及序列切片、重组与格式化。
- 迭代器与高阶流处理(6个):提供惰性流式计算、全称/存在性条件判断及哨兵迭代。
- 作用域与命名空间内省(4个):用于动态排查局部、全局及对象内部符号表。
- 面向对象与反射机制(8个):实现类与实例类型判定、动态增删改查属性与元类基类定义。
- 类方法与属性装饰器(4个):提供描述符封装、类方法绑定与多继承 MRO 链式委托。
- 输入输出与交互控制(4个):标准输入输出管道、操作系统物理文件操作及文档帮助检索。
- 动态编译与代码执行(4个):将字符串源码动态编译为 AST 字节码并按需在指定沙箱执行。
- 运行时底层与对象标识(5个):获取对象内存物理唯一地址、哈希值计算及对象调用契约检验。
二、数学与数值计算函数(7个)
这 7 个函数用于处理基本数值逻辑。与 math 模块相比,内置数学函数覆盖的是所有数值类型通用的基础算术操作。
| 函数签名 | 返回值与功能简述 | 典型调用示例 |
|---|---|---|
| abs(x) | 返回数值的绝对值;若为复数则返回其模长 | abs(-15.6) → 15.6 |
| divmod(a, b) | 同时返回商和余数的二元组 (a // b, a % b) |
divmod(100, 30) → (3, 10) |
| max(arg1, arg2, *args, [key]) | 返回可迭代对象或多个参数中的最大值,支持自定义 key 函数 | max([-2, 5, -8], key=abs) → -8 |
| min(arg1, arg2, *args, [key]) | 返回可迭代对象或多个参数中的最小值,支持自定义 key 函数 | min(["apple", "fig"], key=len) → "fig" |
| pow(base, exp, [mod]) | 计算 base ** exp;若提供第三个参数,执行高效模幂运算 (base ** exp) % mod |
pow(3, 3, 5) → 2 |
| round(number, [ndigits]) | 执行数值舍入。遵循“四舍六入五成双”(向最接近的偶数舍入)原则 | round(2.5) → 2;round(3.5) → 4 |
| sum(iterable, [start]) | 从 start(默认0)开始,将可迭代对象中的元素依次累加 |
sum([1, 2, 3], 10) → 16 |
1. 翻页与时间计算:divmod() 相比单独写一次 // 和一次 %,只在底层执行一次除法指令,效率更高。常用于秒数拆分为分秒:mins, secs = divmod(total_seconds, 60)。
2. 舍入陷阱:round() 并非学校数学中传统的绝对“四舍五入”,而是 IEEE 754 推荐的银行家舍入法。例如 round(0.5) 为 0,round(1.5) 为 2。如果在财务系统需要严格进位,应使用 decimal 模块。
三、数据类型与构造转换函数(13个)
Python 中每个基本类型名称本质上都是其内置类的构造方法,负责将其他对象安全转换为目标格式。
| 函数签名 | 目标数据类型与核心功能 | 典型调用示例 |
|---|---|---|
| bool([x]) | 将对象转换为布尔值,依据标准的真值测试判定 | bool([]) → False |
| int(x, [base=10]) | 将数值或字符串转换为整数,支持指定 2~36 进制 | int("1010", base=2) → 10 |
| float(x) | 将字符串或整数转为双精度浮点数,支持科学计数法与 "inf" |
float("1e-3") → 0.001 |
| complex(real, [imag]) | 构造形如 real + imag*j 的复数对象 |
complex(3, -4) → (3-4j) |
| str(object='') | 返回面向用户的可读字符串形式 | str(123) → "123" |
| bytes([source]) | 构造不可变字节序列,范围 0~255 | bytes("你好", "utf-8") |
| bytearray([source]) | 构造可变字节数组,支持原地切片与修改赋值 | ba = bytearray(b"abc"); ba[0] = 65 |
| memoryview(obj) | 创建支持缓冲区协议对象的零拷贝(Zero-copy)内存切片视图 | mv = memoryview(b"data")[1:3] |
| ord(c) | 输入单字符,返回对应的 Unicode 码点整数值 | ord('A') → 65;ord('中') → 20013 |
| chr(i) | 输入整数码点(0~0x10FFFF),返回对应的 Unicode 字符 | chr(65) → 'A';chr(20013) → '中' |
| bin(x) | 将整数转换为以 0b 为前缀的二进制字符串 |
bin(10) → '0b1010' |
| oct(x) | 将整数转换为以 0o 为前缀的八进制字符串 |
oct(64) → '0o100' |
| hex(x) | 将整数转换为以 0x 为前缀的十六进制小写字符串 |
hex(255) → '0xff' |
四、数据结构与容器操作函数(13个)
Python 高效操作的关键在于对基础集合容器的娴熟运用。以下 13 个内置函数覆盖了容器的声明、排序、切片和打包:
| 函数名称 | 主要功能 | 特性说明与代码范例 |
|---|---|---|
| list([iterable]) | 构造可变列表 | list((1, 2, 3)) → [1, 2, 3] |
| tuple([iterable]) | 构造不可变元组 | tuple([1, 2]) → (1, 2) |
| dict(**kwarg) | 构造键值对映射表 | dict(a=1, b=2) → {{'a': 1, 'b': 2}} |
| set([iterable]) | 构造可变无序去重集合 | set([1, 2, 2, 3]) → {{1, 2, 3}} |
| frozenset([iterable]) | 构造不可变集合,哈希安全,可作为字典键 | frozenset([1, 2]) |
| len(s) | 返回容器元素个数,内部快速读取 ob_size 字段 |
len([10, 20, 30]) → 3 |
| range(stop) | 生成不可变等差数列,占用恒定 O(1) 内存 | range(0, 10, 2) → 0, 2, 4, 6, 8 |
| enumerate(iterable, start=0) | 将序列包装为包含计数索引和原值的元组迭代器 | list(enumerate(['a', 'b'], 1)) → [(1, 'a'), (2, 'b')] |
| zip(*iterables, strict=False) | 并行配对聚合多个迭代器元素为元组 | list(zip([1, 2], ['x', 'y'])) → [(1, 'x'), (2, 'y')] |
| reversed(seq) | 返回序列的反向反转迭代器,无需拷贝原列表 | list(reversed([1, 2, 3])) → [3, 2, 1] |
| sorted(iterable, *, key=None, reverse=False) | 返回由原序列元素组成的新升序/降序列表(Timsort 算法) | sorted([3, 1, 2]) → [1, 2, 3] |
| slice(start, stop, step) | 生成切片对象,可在自定义类或对复杂数组重复应用 | s = slice(1, 4, 2); [0, 1, 2, 3, 4][s] → [1, 3] |
| format(value, [format_spec]) | 依据格式化规范转换字符串,底层委派给 __format__ |
format(1234.567, ",.2f") → "1,234.57" |
五、迭代器与高阶流处理函数(6个)
Python 支持函数式编程的核心内置工具就是这一组高阶函数。它们以惰性求值为核心,在处理千万级数据集时不会发生内存暴涨。
标准处理管线通常分为四个步骤:
- 数据源输入:通过
range()、文件读取句柄open()或集合类获取基础数据流。 - 转换与匹配:使用
map()进行逐项运算变换,使用filter()剔除不合规元素,使用zip()与enumerate()进行组合对齐。 - 状态迭代消费:通过
iter()获取迭代器,使用next()在循环中单步推进并设置默认兜底值。 - 终端聚合:使用
sorted()输出结构化结果,或利用all()、any()、sum()进行逻辑决断和标量计算。
| 函数签名 | 运作模式 | 关键边界与注意事项 |
|---|---|---|
| all(iterable) | 若所有元素皆为真则返回 True,遇到首个 False 立即短路 |
空真规则:all([]) 返回 True(空集合中不存在任何假元素) |
| any(iterable) | 只要存在任意一个元素为真则返回 True,遇到首个 True 短路 |
any([]) 返回 False;支持任意迭代器 |
| filter(function, iterable) | 过滤序列,仅保留满足 function(item) == True 的元素迭代器 |
若 function 传入 None,则自动移除所有假值元素 |
| map(function, *iterables) | 将函数依次作用于可迭代对象的每项元素,返回惰性迭代器 | 传入多个序列时,以最短序列的终点为结束条件 |
| iter(object, [sentinel]) | 返回对象的迭代器。若传入 sentinel,则持续调用 object() 直至返回值等于哨兵 |
读取文件块典型范式:iter(lambda: f.read(1024), b'') |
| next(iterator, [default]) | 调用迭代器的 __next__() 方法取出下一项 |
当迭代耗尽时,若未提供 default 则抛出 StopIteration,提供则安全返回该值 |
实战高阶流处理代码示例:
# 环境:Python 3.8+ 任意环境
numbers = [12, -7, 0, 15, 8, -3, 22]
# 组合管线:过滤负数 -> 平方变换 -> 降序排序
pipeline = sorted(map(lambda x: x ** 2, filter(lambda x: x > 0, numbers)), reverse=True)
print("处理后的平方降序序列:", pipeline)
# 安全迭代推进示例
iterator = iter(["Task-A", "Task-B"])
print("Step 1:", next(iterator, "已无任务"))
print("Step 2:", next(iterator, "已无任务"))
print("Step 3 (安全越界):", next(iterator, "已无任务"))
六、作用域与命名空间内省函数(4个)
Python 程序在执行时,所有变量名均存储在对应的符号表字典中。以下 4 个函数允许开发者在运行时内省命名空间:
dir([object]):若不带参数,返回当前局部作用域内的全部变量名列表;若带参数,返回该对象的所有有效属性和方法名(包含特殊双下划线方法)。globals():返回当前全局命名空间的真实字典引用。修改该字典内的键值会直接更改全局变量。locals():返回当前局部命名空间的字典。在函数内部,Python 字节码优化了局部变量存储(FAST 局部数组),因此locals()仅返回一份快照字典,修改该字典不会影响实际的局部变量。vars([object]):返回对象的__dict__属性。若不带参数,等同于locals()。如果目标对象未定义__dict__(如使用了__slots__的类),调用将抛出TypeError。
七、面向对象与属性反射函数(8个)
反射(Reflection)是指程序在运行状态中,能够探知任意一个对象的内部属性和方法,并且能够动态调用与修改。
| 函数签名 | 功能定义 | 防错与安全调用规范 |
|---|---|---|
| getattr(object, name, [default]) | 获取对象属性值。若属性不存在且有 default 则返回默认值 |
务必提供第三参数 default,避免抛出 AttributeError |
| hasattr(object, name) | 判断对象是否包含指定名称的属性或方法 | 底层通过尝试 getattr 并捕获异常实现,频繁调用有微小开销 |
| setattr(object, name, value) | 动态为对象添加或重设指定属性值 | 等价于 object.name = value,适用于配置项批量灌入 |
| delattr(object, name) | 删除对象的指定属性,等价于 del object.name |
若属性不存在将抛出 AttributeError |
| isinstance(object, classinfo) | 检查对象是否为指定类或元组中任一类的实例(考虑继承链) | 推荐的多态检查手段,子类实例会被认定属于父类 |
| issubclass(class, classinfo) | 检查第一个类是否是第二个类(或元组中类)的直接/间接子类 | 两个参数必须都是类对象,否则抛出 TypeError |
| type(object) / type(name, bases, dict) | 单参数时返回对象精确类型;三参数时为元类工厂,动态创建新类 | 精准单类型判断,不考虑继承链;支持动态创建类 |
| object() | 返回所有 Python 类的最底层基类无状态新实例 | 常作为单例哨兵对象,占用内存最小且唯一不可伪造 |
从底层实现来看,type(obj) is Cls 仅核验对象指针直接指向的类型描述符;而 isinstance(obj, Cls) 会遍历实例所属类的整个 __mro__(方法解析顺序元组)。
在 Python 中,bool 是 int 的直接子类。因此 isinstance(True, int) 为 True,但 type(True) is int 为 False。在编写业务代码时,绝大多数情况下应该使用 isinstance() 保证面向对象多态兼容性。
八、类方法与属性装饰器函数(4个)
虽然在现代 Python 中开发者习惯以 @property 的语法糖形式使用,但它们在语言底层均为纯正的 built-in 函数。
-
property(fget=None, fset=None, fdel=None, doc=None): 构建托管属性描述符。通过拦截属性读取、赋值和删除行为,在不改变原有属性访问语法的外部前提下,于内部嵌入数据校验、懒加载或只读保护逻辑。 -
classmethod(function): 将普通函数转换为类方法。被修饰的方法在调用时,第一个隐式参数不再是实例self,而是所属类对象cls。常用于编写自定义工厂方法。 -
staticmethod(function): 将普通函数转换为静态方法。静态方法不再隐式接收任何self或cls参数,本质上是挂载在类命名空间内的独立通用工具函数。 -
super([type, [object-or-type]]): 返回代理对象,用于委托调用父类或兄弟类的方法。在多重继承体系中,super()会严格遵循 C3 线性化算法生成的 MRO 顺序推进,防止菱形继承(Diamond Problem)导致的基类方法重复执行。
九、输入输出与交互控制函数(4个)
作为程序与外部环境打交道的门户,这 4 个函数支撑了终端交互与文件系统读写:
| 函数签名 | 主要功能 | 实用参数与生产最佳实践 |
|---|---|---|
| print(*objects, sep=' ', end=' ', file=sys.stdout, flush=False) | 将对象格式化后输出至指定流,默认输出到控制台 |
• sep:设置多参数间的分隔字符• flush=True:在终端实时刷新进度条,避免标准I/O行缓冲阻塞
|
| input([prompt]) | 暂停程序,在控制台打印提示符并读取用户的一行输入,返回纯字符串 | 读取结果始终为 str 类型,数值需显式强转,如 int(input()) |
| open(file, mode='r', buffering=-1, encoding=None...) | 打开系统文件,返回对应的文件流迭代器 | 必须显式指定 encoding='utf-8',配合 with 上下文管理器确保句柄按时关闭 |
| help([object]) | 唤起内置交互式帮助系统,或直接输出指定对象、模块的 docstring 文档 | 调试与终端排查利器,如 help(dict.setdefault) |
十、动态编译与代码执行函数(4个)
这组函数提供了直接操纵 Python 虚拟机编译器和运行时执行引擎的底层能力。由于它们具有极高的灵活性,在获得强大元编程能力的同时,也伴随着安全风险。
| 函数签名 | 执行机制 | 风险等级与防范策略 |
|---|---|---|
| eval(expression, [globals], [locals]) | 对单个 Python 表达式字符串求值并直接返回计算结果 | 高危:若传入包含恶意指令的字符串(如 __import__('os').system(...))将导致系统被接管。解析字面量必须改用 ast.literal_eval。 |
| exec(object, [globals], [locals]) | 动态执行任意多行 Python 代码块、语句与类/函数定义,固定返回 None |
高危:务必严格传入受限的 globals 字典沙箱环境,隔离内置命名空间。 |
| compile(source, filename, mode, flags=0, dont_inherit=False) | 将源码字符串预编译为可供 exec() 或 eval() 执行的内部代码对象 |
适合循环体内重复执行的动态模板。预编译只需进行一次,能显著消除重复词法语法分析开销。 |
| __import__(name, [globals], [locals], [fromlist], [level]) | 由 import 语句底层直接调用的原始挂钩函数 |
普通工程中动态引入模块应使用官方推荐的标准库 importlib.import_module(),而非直接调用 __import__。 |
永远不要对来自 Web 请求、用户提交表单或未经校验的配置文件执行 eval()。如果仅仅需要将字符串转换为列表、字典或数字,应使用标准库中的安全解析器:
import ast
# 安全解析字符串形式的配置容器
user_input = "{'host': '127.0.0.1', 'port': 8080}"
safe_config = ast.literal_eval(user_input)
print("安全解析成功:", safe_config["port"])
十一、运行时底层与对象标识函数(5个)
这 5 个函数与 CPython 底层对象模型密切相关,负责内存唯一性检验、哈希定位与准确文本表征:
| 函数签名 | 核心功能与底层机制 | 关键结论与使用准则 |
|---|---|---|
| id(object) | 返回对象的唯一内存标识整数(CPython 中即对象内存首地址) | 在对象的整个生命周期中唯一且恒定;a is b 等价于 id(a) == id(b) |
| hash(object) | 返回对象的整数哈希值,用于字典键与集合元素的哈希桶快速定位 | 仅不可变类型(数字、字符串、元组、frozenset)是可哈希的;列表与字典调用抛出 TypeError |
| callable(object) | 检查对象是否可以被调用(是否包含 __call__ 槽位) |
函数、方法、类对象及实现了 __call__ 的自定义类实例均返回 True |
| repr(object) | 返回对象的官方规范字符串形式,尽可能满足 eval(repr(obj)) == obj |
优先供开发者排错、日志记录和 REPL 输出使用,保留类型信息和引号细节 |
| ascii(object) | 类似于 repr(),但会自动将非 ASCII 字符转义为 \x、\u 或 \U 前缀 |
常用于向仅支持纯 ASCII 的遗留通信协议或日志系统安全输出文本 |
十二、综合总结与避坑速查全景路线
掌握全部 68 个内置函数并不意味着要在每一个场景强行使用它们。遵循良好的工程直觉,明确它们在开发生命周期中的频率分布与边界限制,才是提升代码可靠性与性能的关键。
在日常开发与代码重构中,请重点遵循以下四条核心实践法则:
-
法则 1:优先使用原生内置函数代替手写循环。
像
sum()、any()、enumerate()等函数均由底层 C 代码高度优化并支持短路机制,无论在执行速度还是代码简洁度上都优于手写for循环计数。 -
法则 2:理解惰性迭代与立即求值的开销界限。
range()、map()、filter()和zip()生成的是惰性迭代器,单次遍历时内存开销恒为 O(1)。若需要对结果进行多次索引访问、长度测量或重复遍历,才需要通过list()显式具象化。 -
法则 3:面向对象设计牢记多态优先。
使用
isinstance()进行参数类型断言,允许用户传入衍生子类;只在必须排他隔离的序列化与类型注册中心,才使用type(obj) is cls。 -
法则 4:安全底线坚决不让步。
涉及字符串代码求值时,坚决抵制
eval()的随意调用,对配置字典字符串优先使用ast.literal_eval(),确保业务系统远离注入安全漏洞。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









