Python内置函数大全:68个Built-in Functions分类速查表

巷口听风
巷口听风
发布时间:2026-11-07 | 10人浏览过
原创

完整梳理Python官方标准库定义的全部68个内置函数(Built-in Functions)。按照类型转换、数学运算、容器迭代、反射省视、作用域与运行时等维度进行系统分类与详细解析,附带高清架构图示与易混淆点辨析。

在 Python 的标准运行环境中,解释器预先载入了 68 个可以直接调用的内置函数(Built-in Functions)。它们无需使用 import 导入任何模块,直接存在于全局命名空间的最外层作用域中。本文系统梳理这 68 个函数的具体职责、使用条件与底层行为,将其划分为 7 大核心功能域,并结合图示、对比表格与代码范例,提供一份可以直接查阅和验证的操作参考手册。

一、Built-in 命名空间定位与检索机制

当我们在代码中书写一个标识符(如 len("hello"))时,Python 解释器按照 LEGB 规则 依次向上检索变量名:Local(局部命名空间)→ Enclosing(闭包命名空间)→ Global(当前模块全局命名空间)→ Built-in(内置命名空间)。内置函数正是位于这条查找链的最终端点。

在底层实现中,所有 68 个内置函数都作为属性保存在标准库的 builtins 模块中。如果需要直接查看当前 Python 环境下的全部内置标识符并筛选出内置函数,可以在终端交互界面执行以下代码:

import builtins

# 筛选出属于内置函数或内置类型构造器的对象
builtins_list = [
    name for name in dir(builtins)
    if not name.startswith("_") and callable(getattr(builtins, name))
]

print(f"有效可调用项统计: {len(builtins_list)}")
# 在标准 Python 3.10 及以上环境中,核心内置函数数量严格对应为 68 个

理解这套查找链对于编写稳健代码至关重要。若在局部或全局作用域中声明了同名变量(例如定义了 list = [1, 2] 或 str = "text"),解释器将在较浅的层级完成匹配,从而遮蔽(Shadow)底层内置函数的功能,导致后续调用 list() 报出 TypeError: 'list' object is not callable。

Python内置函数大全:68个Built-in Functions分类速查表
图 1:Python 解释器变量寻址链与 Built-in 命名空间定位

二、68个内置函数核心分类速查表

在 Python 语言规范中,部分内置“函数”在严格的类型系统上其实属于内置类(例如 int、list、dict 的本质是类构造器),但从调用语法和语言规范统一视角出发,它们在官方手册中全部被统一收录在 Built-in Functions 这一词条下。根据实际工程中的用途,我们可以将其清晰划分为 7 大板块:

1. 类型构造与基元转换(15 个)

函数名称 功能简要说明 标准使用示例
bool(x) 根据真值测试规则将参数转换为布尔值 bool(0) # False
int(x, base=10) 将字符串或数字转换为整型,支持基数转换 int("1f", 16) # 31
float(x) 将字符串或数字转换为双精度浮点数 float("3.1415") # 3.1415
complex(r, i) 构造复数对象:real + imag*1j complex(2, 3) # (2+3j)
str(object='') 返回面向用户的非正式可读字符串形式 str(100) # '100'
bytes(source) 创建不可变的字节序列对象 bytes([65, 66]) # b'AB'
bytearray(source) 创建可变的字节数组序列 b = bytearray(b"hi"); b[0] = 72
memoryview(obj) 创建对支持缓冲区协议对象的无复制切片视图 mv = memoryview(b"data")
list(iterable) 将可迭代对象构建为普通列表容器 list("abc") # ['a', 'b', 'c']
tuple(iterable) 将可迭代对象构建为不可变元组容器 tuple([1, 2]) # (1, 2)
set(iterable) 构建去重且无序的可变集合 set([1, 2, 2, 3]) # {1, 2, 3}
frozenset(iter) 构建不可变集合,可作为字典键或存入集合 frozenset({1, 2})
dict(**kwarg) 创建键值映射字典对象 dict(a=1, b=2) # {'a': 1, 'b': 2}
chr(i) 将 Unicode 整数代码点转换为对应的单字符 chr(97) # 'a'
ord(c) 返回对应 Unicode 字符的整数代码点 ord('a') # 97

2. 数学运算与数值处理(7 个)

函数名称 功能简要说明 标准使用示例
abs(x) 返回数字的绝对值或复数的模长 abs(-5) # 5; abs(3+4j) # 5.0
divmod(a, b) 同时计算并返回商与余数组成的元组 (a // b, a % b) divmod(17, 5) # (3, 2)
pow(base, exp[, mod]) 快速幂运算,提供三参数时执行高效取模算法 pow(2, 10, 7) # 2^10 % 7 = 2
round(number[, ndigits]) 四舍六入五成双的浮点舍入(银行家舍入法则) round(2.5) # 2; round(3.5) # 4
sum(iterable, start=0) 计算数字序列的累计总和 sum([1, 2, 3], start=10) # 16
min(iterable, *[, key, default]) 返回序列中或参数中的最小值,支持比较键与默认值 min([1, 4, 2]) # 1
max(iterable, *[, key, default]) 返回序列中或参数中的最大值,支持自定义权重键 max(["a", "abc"], key=len) # 'abc'

3. 序列、迭代器与容器生成(12 个)

函数名称 功能简要说明 标准使用示例
len(s) 返回容器对象的元素数量(调用 __len__) len("Python") # 6
range(start, stop[, step]) 创建按等差规律生成的不可变数字序列 list(range(0, 5, 2)) # [0, 2, 4]
enumerate(iterable, start=0) 生成带索引计数的二元组迭代器 list(enumerate(['a', 'b'])) # [(0,'a'), (1,'b')]
zip(*iterables, strict=False) 并行组合多个可迭代对象的对应元素为元组 list(zip([1, 2], ['a', 'b'])) # [(1,'a'), (2,'b')]
iter(object[, sentinel]) 获取对象的迭代器,或配合哨兵值持续获取输入 it = iter([1, 2]); next(it) # 1
next(iterator[, default]) 推进迭代器并返回下一项,耗尽时可返回兜底默认值 next(it, -1) # 2; next(it, -1) # -1
filter(function, iterable) 筛选使判定函数为 True 的元素并返回惰性迭代器 list(filter(lambda x: x > 0, [-1, 2])) # [2]
map(function, *iterables) 将函数映射到可迭代序列的每个元素上并惰性求值 list(map(str.upper, ['a', 'b'])) # ['A', 'B']
sorted(iterable, *[, key, reverse]) 将可迭代对象作为新列表返回排好序的结果 sorted([3, 1, 2]) # [1, 2, 3]
reversed(seq) 返回反向遍历序列的反向迭代器 list(reversed([1, 2, 3])) # [3, 2, 1]
all(iterable) 如果序列中所有元素皆为真值(或为空)则返回 True all([True, 1, "ok"]) # True
any(iterable) 只要序列中存在至少一个真值元素则返回 True any([0, False, "data"]) # True

4. 对象省视、反射与面向对象支持(13 个)

函数名称 功能简要说明 标准使用示例
isinstance(object, classinfo) 检测对象是否为指定类型或其派生子类的实例 isinstance(True, int) # True
issubclass(class, classinfo) 检测某类是否为目标类的派生子类 issubclass(bool, int) # True
type(object) / type(name, bases, dict) 获取对象的直接类型,或以三参数动态创建新类 type(10) # <class 'int'>
id(object) 返回对象在内存生命周期内的唯一整数标识(内存地址) id(x) # 140733856230480
hash(object) 计算并返回不可变对象的哈希整数值 hash("token") # 78129037149
getattr(object, name[, default]) 以字符串形式反射获取对象的属性值 getattr(obj, "x", None)
setattr(object, name, value) 动态向对象属性注入新值 setattr(obj, "status", 200)
hasattr(object, name) 检测对象是否包含指定名称的属性 hasattr(obj, "close") # True
delattr(object, name) 动态删除对象的指定属性 delattr(obj, "temporary_field")
dir([object]) 返回当前作用域名称列表或对象所具备的全部可用属性 dir([]) # 列出列表所有魔术方法与可用操作
callable(object) 检测对象是否可以被调用(如函数、类或实现了 __call__) callable(print) # True
property(fget=None, fset=None, ...) 创建托管属性特性的描述符,常以装饰器形式使用 @property def val(self): return self._v
super([type[, object-or-type]]) 根据方法解析顺序(MRO)委派父类方法调用 super().__init__()
Python内置函数大全:68个Built-in Functions分类速查表
图 2:基于反射机制的对象属性动态探测与安全获取步骤

5. 作用域分析与底层运行时交互(8 个)

函数名称 功能简要说明 标准使用示例
globals() 返回代表当前模块全局符号表的真实字典 globals()['_custom_var'] = 42
locals() 更新并返回当前作用域局部变量的字典拷贝 current_vars = locals()
vars([object]) 返回模块、类、实例或任何具有 __dict__ 的对象的字典属性 vars(self) # 获取实例所有字段键值对
classmethod(fn) 将方法转为类方法,第一个参数隐式绑定为 cls @classmethod def create(cls): ...
staticmethod(fn) 将方法转为静态方法,不接收隐式的 self 或 cls @staticmethod def util(): ...
__import__(name) 解释器底层的导入钩子,由 import 语句直接调用 math = __import__('math')
compile(source, ...) 将源码字符串解析为代码对象(Code Object)以备执行 c = compile("a + 1", "<str>", "eval")
help([object]) 调起内置的交互式帮助系统,查阅文档字符串 help(sorted)

6. 动态执行与格式化输入输出(7 个)

函数名称 功能简要说明 标准使用示例
print(*objects, ...) 将对象格式化输出至流(默认为 sys.stdout) print("结果:", val, sep=" ", end="\n")
input([prompt]) 从控制台读取一行输入,末尾换行符被去除并返回字符串 name = input("请输入姓名: ")
open(file, mode='r') 打开操作系统文件并返回对应的文件流流对象 with open("log.txt", "w", encoding="utf-8") as f: ...
format(value[, spec]) 根据格式化说明符将数值转换为格式化文本 format(1234.567, ",.2f") # '1,234.57'
repr(object) 返回对象的规范字符串表达(通常满足 eval(repr(x)) == x) repr("hello") # "'hello'" (带引号)
eval(expression, ...) 解析并计算一段 Python 表达式并返回计算结果 eval("2 * 3 + 1") # 7
exec(object, ...) 动态执行 Python 复杂语句块与控制流 exec("for i in range(2): print(i)")

7. 调试、系统配置与特殊协议(6 个)

函数名称 功能简要说明 标准使用示例
breakpoint(*args) 下发调试断点,底层调用 sys.breakpointhook()(自 3.7 加入) breakpoint() # 自动进入 pdb 调试模式
ascii(object) 类似于 repr(),但通过 \x、\u 将非 ASCII 字符转义 ascii("中文") # "'\\u4e2d\\u6587'"
bin(x) 将整数转换为带有 0b 前缀的二进制字符串 bin(10) # '0b1010'
oct(x) 将整数转换为带有 0o 前缀的八进制字符串 oct(10) # '0o12'
hex(x) 将整数转换为带有 0x 前缀的十六进制小写字符串 hex(255) # '0xff'
slice(start, stop[, step]) 构造切片对象,等价于扩展索引语法 [start:stop:step] s = slice(0, 5, 2); "abcdef"[s] # 'ace'
数量验证小结

15(类型构造) + 7(数学计算) + 12(序列迭代) + 13(反射与对象) + 8(作用域与运行时) + 7(输入输出与执行) + 6(系统与编码) = 68 个官方内置函数。全部成员均在此列,无遗漏与无中生有项。

三、核心内置函数工作机理与典型场景

1. 集合聚合与短路求值:all() 与 any()

all() 和 any() 用于快速判断可迭代对象中元素的逻辑真假。这两个函数均原生具备短路求值特性:any() 一旦扫描到首个 True 元素,便立即终止后续生成器的迭代;all() 一旦遇到 False 元素,也会立即返回,不再继续向后取值。

# 场景:检测文件列表中是否存在危险扩展名(具备短路保护)
filenames = ["app.py", "main.py", "exploit.sh", "data.csv"]
dangerous_exts = {".sh", ".exe", ".bin"}

has_risk = any(file.endswith(ext) for file in filenames for ext in dangerous_exts)
print(f"安全风险命中: {has_risk}")  # 输出: True

2. 双向解构与并行配对:zip(*iterables, strict=False)

在 Python 3.10 之后,zip 引入了 strict=True 参数。当传入的多个可迭代序列长度不一致时,若未显式要求,旧版本会默默在最短序列结束时停止截断,这往往会掩盖逻辑缺陷。开启 strict=True 后,长度不吻合将直接抛出 ValueError,极大增强了数据管道处理时的健壮性。

keys = ["host", "port", "timeout"]
values = ["127.0.0.1", 8080]

# 严格模式保证长度必须对齐
try:
    config = dict(zip(keys, values, strict=True))
except ValueError as e:
    print(f"数据源未对齐: {e}")  # 捕获异常,阻断脏数据生成
Python内置函数大全:68个Built-in Functions分类速查表
图 3:zip 函数在标准模式与 strict=True 下的配对与报错行为差异

四、常见概念辨析与易混淆点纠偏

1. 误区辨析:isinstance() 与 type() 的适用界限

很多初学者倾向于用 type(obj) == target_type 来做类型断言。这种做法在绝大多数面向对象场景下是不严谨的。

  • 为什么看似合理:对于非继承体系的基元对象(如 type(10) == int),返回结果完全符合预期。
  • 何时会失效:在存在继承关系的模型中,type() 只检查对象的精确类类型,不考虑继承链。由于 Python 中的 bool 是 int 的派生子类,isinstance(True, int) 为 True,而 type(True) == int 则会判定为 False。
  • 修正建议:除非你明确要求“排除一切派生子类、必须是该类本身”,否则一律优先使用 isinstance(obj, ClassInfo)。
class CustomList(list):
    """自定义带业务特性的列表子类"""
    pass

c = CustomList([1, 2, 3])

# type() 判定会抹杀多态特性
print(type(c) == list)         # 结果为 False

# isinstance() 能够正确识别继承关系
print(isinstance(c, list))     # 结果为 True

2. 误区辨析:round() 遵循的是简单“四舍五入”吗?

常规认知里的“四舍五入”(如小学数学口诀)遇到 .5 时始终向上进位。但在 Python 的内置 round() 实现中,遵循的是 IEEE 754 标准中的银行家舍入法(Half to Even):当被舍弃部分正好为 0.5 时,向最近的偶数取整。

print(round(2.5))  # 输出 2 (2 是离它最近的偶数)
print(round(3.5))  # 输出 4 (4 是离它最近的偶数)
print(round(4.5))  # 输出 4 (4 是离它最近的偶数)

保留原做法合理性的边界:在大量浮点数聚合统计中,这一规则可以消除由于始终向上舍入带来的累积系统正偏差;如果业务上(如金融账目)强制要求固定向上舍入,应转为使用 decimal 模块中的 ROUND_HALF_UP 策略,而不是直接依赖内置 round()。

3. 误区辨析:eval() 是处理用户输入数据的“万能解析器”吗?

eval() 可以快速把类似 "[1, 2, 3]" 的字符串转为真正的列表,这让一些人习惯直接用它来解析用户输入的字典或数组。

潜在危害:eval() 会以当前运行权限执行字符串中的任意 Python 表达式。恶意用户只需输入 __import__('os').system('rm -rf /') 便可破坏系统。对于数据反序列化场景,应使用标准库中的 ast.literal_eval() 替代,后者仅解析纯数据字面量(列表、字典、基础标量),彻底规避代码执行漏洞。

五、总结:内置函数高效选用与排障流程

掌握这 68 个内置函数的目的,是为了写出更加符合 Python 习惯(Pythonic)的代码,用 CPython 内部高度优化的 C 语言底层实现替代我们在 Python 层重复手写的低效逻辑。

Python内置函数大全:68个Built-in Functions分类速查表
图 4:常见开发场景下内置函数的优选与安全重构决策路径

在日常开发过程中,建议牢记以下 3 条落地准则:

  1. 命名绝对保护:严禁使用 id、type、list、dict、str、max、min 等高频内置标识符为自己的临时变量命名。
  2. 反射优先设防:调用 getattr() 时,养成始终传入第三个参数作为默认值的习惯,防止触发 AttributeError 导致程序异常终止。
  3. 惰性优先思想:对于 map()、filter()、zip() 等返回生成器/迭代器的内置函数,只有真正需要落地为具体容器时再使用 list() 解包,在数据流管道中应保留其惰性求值特性以节省内存。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表