相同Python解释器下主程序与控制台内置函数数量不一致原因查询
差异原因解答
核心根因
这个统计值差异是Python内部__builtins__特殊变量在不同运行上下文的指向不同导致的,和解释器版本无关。
两种上下文的具体区别
- 模块级运行环境(你的自研主程序):
__builtins__直接指向标准库的builtins模块本身,类型为<class 'module'>。调用dir(__builtins__)时会枚举整个内置模块包含的所有内置函数、异常类、常量等名称,总数通常在150左右,和你得到的153一致。 - 交互式REPL环境(Python控制台):
__builtins__指向的是builtins.__dict__字典对象,类型为<class 'dict'>。调用dir(__builtins__)时枚举的是字典类型自身的属性方法,总数就是40+,和你得到的45一致。
统一统计的方法
如果要在任意环境下得到准确的内置成员数量,不要直接依赖__builtins__,显式导入builtins模块后再统计即可:
import builtins print(len(dir(builtins)))
运行上述代码后,两个环境输出的统计值会完全一致。
补充说明
__builtins__是CPython实现层面的私有特殊变量,不属于Python语言标准规范的公开API,不同实现或者不同上下文下的指向逻辑可以自由调整,业务代码中不建议直接使用这个变量。
内容的提问来源于stack exchange,提问作者telletubie543
相关产品推荐
相关产品推荐

