Python功能完美的宝库——内置的强大“武器库”builtins
builtins模块包含了Python大量的内置对象(函数、异常和类型等),她是Python的内置武器库,堪称功能完美的宝库。
笔记模板由python脚本于2025-03-19 08:16:27创建,本篇笔记适合喜欢探究python的coder翻阅。
博客的核心价值:在于输出思考与经验,而不仅仅是知识的简单复述。
-
Python官网:
这里,才 python 前沿。英文原版,原汁原味,才是寻根溯源的正统。😎
地址:https://www.python.org/ -
Free:
大咖免费“圣级”秘笈《 python 完全自学教程》不仅仅是基础那么简单……
地址:https://lqpybook.readthedocs.io/
自学并不是什么神秘的东西,一个人一辈子自学的时间,总是比在学校学习的时间长;没有老师的时候总是比有老师的时候多。
—— 华罗庚
-
您,可以在评论区书写任何想法 -
(我将在看到的第一时间回应) -
(预置空地)

本文质量分:
本文地址: https://blog.csdn.net/m0_57158496/article/details/146384194
CSDN质量分查询入口:http://www.csdn.net/qc
目 录
- 🔍 Python.builtins 探秘
- 1、命名演化史
- 1.1 builtins语义
- 1.2 builtins命名演化史
- 2. 模块功能解剖
- 2.1 核心组件
- 2.2 功能分类
- 2.3 常见对象
- 3. 黑魔法实验室
- 3.1 覆盖内置对象
- 3.2 创建沙箱环境
- 4. 最佳实践
- 5. 冷知识
- 6、builtins名称助记拆解
- 附:“沙箱环境”代码解读
🔍 Python.builtins 探秘
“ b u i l t i n s builtins builtins ” —— Python的内置武器库
1、命名演化史
1.1 builtins语义
builtins
在不同语境下可能有不同的含义,具体取决于上下文。以下是常见的几种解释:
- 🇦 🇦 🇦
日常英语中的含义
- Built-ins(通常带连字符)是一个普通英语词汇,指“内置的东西”或“固定安装的组件”。
- 例子:
- 家具中的内置柜子 → “built-in cabinets”
- 厨房中的内置烤箱 → “built-in oven”
- 软件中的内置功能 → “built-in features”
- 🇧 🇧 🇧
编程中的 builtins(Python 专用)
- 在 Python 中,
builtins
是一个内置模块(Python 3 中为builtins
,Python 2 中为__builtin__
),包含所有无需导入即可直接使用的函数、异常和对象。 - 核心功能:
- 提供基础函数(如
print()
,len()
)。 - 内置异常(如
ValueError
,TypeError
)。 - 基本数据类型(如
int
,str
,list
)。
- 提供基础函数(如
- 示例:
# 直接使用内置函数 print("Hello") # 来自 builtins 模块
- 在 Python 中,
- 🇨 🇨 🇨
其他编程语言中的类似概念
- 几乎所有编程语言都有类似的内置功能,但名称可能不同:
- JavaScript:全局对象(如
Math
,Array
,JSON
)。 - C/C++:标准库函数(如
printf()
,malloc()
)。 - Shell 脚本:内置命令(如
cd
,echo
)。
- JavaScript:全局对象(如
- 几乎所有编程语言都有类似的内置功能,但名称可能不同:
- 🇩 🇩 🇩
计算机科学中的广义概念
- 内置(Built-in) 泛指语言或系统中默认提供的功能,无需额外安装或定义即可使用。
- 例子:
- 数据库的内置函数(如 SQL 的
COUNT()
,SUM()
)。 - 操作系统内置命令(如 Windows 的
dir
,Linux 的ls
)。
- 数据库的内置函数(如 SQL 的
1.2 builtins命名演化史
- 🇦 🇦 🇦
命名演化史
从语言学的角度看,builtins
的命名经历了有趣的演变:
阶段 | 形态 | 意义隐喻 |
---|---|---|
动词 | build in | 功能嵌入的动作 |
形容词 | built-in | 已完成的内置状态 |
复数化 | built-ins | 多个内置功能的集合 |
代码实体 | builtins | Python3的模块命名 |
- 🇧 🇧 🇧
Python版本差异
- Python2:
__builtin__
(单数形式,魔法属性) - Python3:
builtins
(复数形式,显式模块)
- Python2:
- 注意:
拼写变体
- 正确拼写: - Python 模块名:builtins
(Python 3)。 - 日常英语:通常写作built-in
(带连字符,可作形容词或名词)。
2. 模块功能解剖
在Python中,builtins
模块包含了所有内置的函数、异常和对象。这些内置功能在Python启动时自动加载,无需显式导入即可使用。
2.1 核心组件
import builtins# 查看所有内置成员
print([item for item in dir(builtins) if not item.startswith('__')])
典型输出(Python3.11):
['ArithmeticError', 'AssertionError', ..., 'zip']
包含157个可直接访问的内置成员(不同版本可能有差异)
2.2 功能分类
类别 | 示例 | 作用域 |
---|---|---|
基础函数 | print() , len() , type() | 全局可用 |
异常体系 | Exception , ValueError | 异常处理基础 |
类型对象 | int , str , dict | 类型系统基石 |
常量 | True , False , None | 逻辑控制基础 |
2.3 常见对象
以下是一些常见的builtins
模块中的内容:
- 内置函数:
print()
:打印输出。len()
:返回对象的长度。type()
:返回对象的类型。int()
,float()
,str()
,list()
,dict()
:类型转换函数。range()
:生成一个整数序列。sum()
:计算序列的和。min()
,max()
:返回序列中的最小值和最大值。abs()
:返回绝对值。round()
:四舍五入。
- 内置异常:
Exception
:所有异常的基类。TypeError
:类型错误。ValueError
:值错误。IndexError
:索引错误。KeyError
:键错误。FileNotFoundError
:文件未找到错误。
- 内置常量:
True
,False
:布尔值。None
:表示空值或无值。
- 内置对象:
object
:所有类的基类。int
,float
,str
,list
,dict
:内置数据类型。
3. 黑魔法实验室
3.1 覆盖内置对象
用自定义对象,覆盖Python对象,是一个比较危险的操作,需谨慎!🧐
# 重定义print函数(请勿在生产环境使用!)
builtins.print = lambda *args: os.system("say '喵喵喵~'")print("Hello World") # 实际会执行系统命令播放猫叫
3.2 创建沙箱环境
# 使用__builtins__副本保证安全
safe_builtins = {k: v for k, v in __builtins__.__dict__.items() if k not in ('__import__', 'open')}exec("print('安全操作')", {'__builtins__': safe_builtins}) # ✅ 允许
exec("open('test.txt')", {'__builtins__': safe_builtins}) # 🚫 触发NameError
“沙箱环境”代码解读
4. 最佳实践
- 避免直接修改
修改builtins
如同更改物理定律,可能导致灾难性后果
- 利用反射机制
def is_builtin(obj):return obj.__module__ == 'builtins'print(is_builtin(print)) # True
- 版本兼容技巧
try:import builtins # Python3 except ImportError:import __builtin__ as builtins # Python2
5. 冷知识
__builtins__
是CPython实现细节,不同环境下表现可能不同:- 在模块中:指向
builtins
模块 - 在
__main__
中:指向builtins.__dict__
- 在模块中:指向
- 内置函数的执行速度比普通函数快约20%(因跳过名称查找)
6、builtins名称助记拆解
我:
build in -> build in s -> built in s -> built-ins -> builtins
build in -> build in s -> built in s -> built-ins -> builtins
Python之builtins名称演化:内建、多个内建、已(build变过去分词形式)多个内建、组合单词、模块名称。🤗🤗
DeepSeek:
你的拆解非常有趣且富有创意!🤓 我将结合 Python 的历史和语言演化,用「拟人化」的方式解释 builtins
的名称演变过程:
- A A A. 内建(Build in → Built-in)**
- 原始形态:动词短语
build in
(嵌入、内置)。 - 语法变身:
- 动词变过去分词 →
built
(已构建的) - 组合为形容词 →
built-in
(已内置的)。
- 动词变过去分词 →
- Python 中的意义:
代表语言原生自带的功能(如print()
),无需用户额外定义。
- 原始形态:动词短语
- B B B. 多个内建(Built-in + s → Built-ins)**
- 复数化:
- 单个功能是
built-in
,但语言有多个内置功能 → 加s
表复数。 - 书写规范:连字符保留 →
built-ins
。
- 单个功能是
- Python 的隐喻:
所有内置函数、异常、类型的集合,像一个工具箱里的工具集合。
- 复数化:
- C C C. 模块名称(Built-ins → builtins)**
- 编程化改造:
- 去掉连字符(编程中变量名通常不用连字符) →
builtins
。 - 全小写(Python 模块命名惯例)。
- 去掉连字符(编程中变量名通常不用连字符) →
- Python 的正式命名:
- Python 3 中模块名称为
builtins
(Python 2 是__builtin__
)。 - 该模块是所有内置功能的容器,像一个隐藏的仓库。
- Python 3 中模块名称为
- 编程化改造:
拟人化总结
- 想象
builtins
的诞生过程:
1️⃣ 最初它是一个动词(
build in
),描述「将功能嵌入语言」。
2️⃣ 后来它变成了形容词(built-in
),表示「已经嵌入的功能」。
3️⃣ 随着功能越来越多,它变成了复数(built-ins
),代表「一群内置工具」。
4️⃣ 最后为了适应代码世界的规则,它脱下连字符的外衣,变成模块名builtins
,成为 Python 的内置工具库管理员。
彩蛋
:Python 2 vs Python 3**
- Python 2:模块名为
__builtin__
(单数,强调「单个内置空间」)。 - Python 3:更名为
builtins
(复数,更符合实际——内置功能是多个的集合)。
这种命名变化也体现了 Python 设计理念的演进:从「隐含的魔法」到「明确的表达」。🎩✨
附:“沙箱环境”代码解读
以下是代码的逐层解析:
# 创建安全的 builtins 副本(排除危险函数)
safe_builtins = {k: v for k, v in __builtins__.__dict__.items() if k not in ('__import__', 'open')}# 测试安全执行
exec("print('安全操作')", {'__builtins__': safe_builtins}) # ✅ 允许
exec("open('test.txt')", {'__builtins__': safe_builtins}) # 🚫 触发NameError
代码解析层级
- 第 1 层:
安全沙箱原理
通过限制代码执行环境的内置功能,防止危险操作(如文件读写、模块导入)。
- 第 2 层:
关键组件
组件 | 作用 |
---|---|
__builtins__ | Python 内置模块的引用(在模块中指向 builtins 模块的字典形式) |
exec() | 动态执行字符串代码,可自定义全局命名空间 |
自定义命名空间 | 通过字典传递 {'__builtins__': safe_builtins} 限制可访问的内置函数 |
- 第 3 层:
代码执行流程
- 过滤内置函数
# 原始内置函数字典 → 过滤后的安全字典 __builtins__.__dict__ → {'abs': <func>, ..., 'print': <func>} # 移除 __import__ 和 open
- 执行安全代码
exec("print(...)", {'__builtins__': safe_builtins}) # 解释器查找 print 的顺序: # 1. 当前代码的局部作用域 → 无 # 2. 自定义全局作用域的 __builtins__ → 找到 print
- 拦截危险操作
exec("open(...)", {'__builtins__': safe_builtins}) # 解释器查找 open 的顺序: # 1. 当前代码的局部作用域 → 无 # 2. 自定义全局作用域的 __builtins__ → 无 open → 触发 NameError
-
第 4 层:
技术细节
__builtins__
的双重身份- 在模块层级:指向
builtins
模块的字典形式(builtins.__dict__
) - 在函数/类内部:是
builtins
模块的引用(需通过__builtins__.__dict__
访问字典)
- 在模块层级:指向
- exec 的命名空间机制
exec(code, globals_dict, locals_dict)
- 若
globals_dict
包含__builtins__
键,则使用该值作为内置模块 - 若未显式指定,默认继承当前环境的
__builtins__
- 安全风险扩展
尽管移除了open
和__import__
,仍存在潜在风险:# 仍可通过其他方式突破限制:exec("os = (lambda: [].__class__.__base__.__subclasses__()[132]())()", safe_env)exec("os.system('rm -rf /')", safe_env) # 通过回溯基类获取 os 模块
提示:要实现真正的安全沙箱,建议使用专用库(如
PySandbox
或RestrictedPython
)。
- 代码可视化
通过这种机制,可以实现基础级别的代码安全隔离。
上一篇:
Python的字符串优雅优化策略:特定编码 -> Unicode码点 -> UTF-8(可自定义)(Python利用唯一uni-pot中介打理,任意制式输出(首选uyf-8))
我的HOT博:
本次共计收集449篇博文笔记信息,总阅读量70.99w。数据采集于2025年03月17日 00:27:47,用时10分46.1秒。阅读量不小于6.00k的有 10 10 10篇。
- 让QQ群昵称色变的神奇代码
地址:https://blog.csdn.net/m0_57158496/article/details/122566500
浏览阅读:63,055
点赞:25 收藏:90 评论:17
(本篇笔记于2022-01-18 19:15:08首次发布,最后修改于2022-01-20 07:56:47)
- Python列表(list)反序(降序)的7种实现方式
地址:https://blog.csdn.net/m0_57158496/article/details/128271700
浏览阅读:14,196
点赞:9 收藏:40 评论:8
(本篇笔记于2022-12-11 23:54:15首次发布,最后修改于2023-03-20 18:13:55)
- 个人信息提取(字符串)
地址:https://blog.csdn.net/m0_57158496/article/details/124244618
浏览阅读:10,461
点赞:3 收藏:21
(本篇笔记于2022-04-18 11:07:12首次发布,最后修改于2022-04-20 13:17:54)
- pandas 数据类型之 DataFrame
地址:https://blog.csdn.net/m0_57158496/article/details/124525814
浏览阅读:10,358
点赞:7 收藏:40
(本篇笔记于2022-05-01 13:20:17首次发布,最后修改于2022-05-08 08:46:13)
- 统计字符串字符出现的次数
地址:https://blog.csdn.net/m0_57158496/article/details/130517025
浏览阅读:8,535
点赞:5 收藏:27
(本篇笔记于2023-05-06 22:28:18首次发布,最后修改于2023-05-12 06:21:40)
- 罗马数字转换器|罗马数字生成器
地址:https://blog.csdn.net/m0_57158496/article/details/122592047
浏览阅读:8,393
收藏:3
(本篇笔记于2022-01-19 23:26:42首次发布,最后修改于2022-01-21 18:37:46)
- Python字符串居中显示
地址:https://blog.csdn.net/m0_57158496/article/details/122163023
浏览阅读:8,190
点赞:1 收藏:12 评论:1
- 回车符、换行符和回车换行符
地址:https://blog.csdn.net/m0_57158496/article/details/123109488
浏览阅读:6,921
点赞:2 收藏:4
(本篇笔记于2022-02-24 13:10:02首次发布,最后修改于2022-02-25 20:07:40)
- python清屏
地址:https://blog.csdn.net/m0_57158496/article/details/120762101
浏览阅读:6,282
点赞:1 收藏:10
- 我的 Python.color() (Python 色彩打印控制)
地址:https://blog.csdn.net/m0_57158496/article/details/123194259
浏览阅读:6,192
点赞:2 收藏:9
(本篇笔记于2022-02-28 22:46:21首次发布,最后修改于2022-03-03 10:30:03)
截屏图片
(此文涉及ChatPT,曾被csdn多次下架,前几日又因新 发笔记被误杀而落马。躺“未过审”还不如回收站 ,回收站还不如永久不见。😪值此年底清扫,果 断移除。留此截图,以识“曾经”。2023-12-31)

精品文章:
- 好 文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永 久分享,点击跳转 免费🆓下载。)
- OPP三大特性:封装中的property
- 通过内置 对象理解python
- 正则表达式
- python中“*”的作用
- Python 完全自学手册
- 海象运算符
- Python中的 `!=`与`is not`不同
- 学习编程的正确方法
◆ Python 入门指南 【Python 3.6.3】
好文力 荐:
- 全栈领域优质创作者——[寒 佬]博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
- 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
- 靠谱程序员的好习惯
- 大佬帅地的优质好文“函 数功能、结束条件、函数等价式”三大要素让您认清递归
CSDN实用技巧博文:
- 8个好用到爆的Python实用技巧
- python忽略警告
- Python代 码编写规范
- Python的docstring规范(说明文档的规范写法)