2025-10-08 Python 标准库 3——内置常量
·
文章目录
在Python中,有一批特殊的值被称为“内置常量”——它们无需导入任何模块,直接存在于内置命名空间中,是Python语言底层提供的基础值。这些常量分为两类:一类是核心功能依赖的 核心内置常量,另一类是
site模块自动添加的 交互式专用常量(仅用于解释器交互场景)。
1. 内置常量
这类常量是Python语法和核心功能的一部分,贯穿于日常开发中,必须理解其本质和限制。
1.1. False
- 定义:布尔(
bool)类型的“假值”,是所有逻辑判断中“否定”状态的基础表示(如2 > 3的结果就是False)。 - 关键限制:赋值非法——任何试图给
False赋值的操作(如False = 0)都会直接引发SyntaxError,它是不可修改的“真正常量”。
1.2. True
- 定义:布尔(
bool)类型的“真值”,对应逻辑判断中“肯定”状态(如2 < 3的结果就是True)。 - 关键限制:与
False完全一致,赋值非法,会引发SyntaxError,不可修改。
1.3. None
- 定义:代表“空值”的特殊对象,常用于表示“无结果”“未赋值”或“默认空参数”。例如:
- 函数未指定返回值时,默认返回
None(如def func(): pass,调用func()得到None); - 函数参数的默认值设为
None,表示“未传入该参数”(如def add(a, b=None): ...)。
- 函数未指定返回值时,默认返回
- 类型特性:
None是NoneType类型的唯一实例——也就是说,世界上只有一个None,判断“是否为空”推荐用is None(而非== None)。 - 关键限制:赋值非法,会引发
SyntaxError,不可修改。
1.4. NotImplemented
- 定义:用于“双目运算特殊方法”(如
__eq__(等于)、__lt__(小于)、__add__(加法))或“原地双目运算特殊方法”(如__imul__(原地乘法)、__iand__(原地与运算))的返回值,表明“当前方法未实现对其他类型的支持”。 - 行为逻辑:当解释器看到方法返回
NotImplemented时,会尝试“反射操作”——比如a + b调用a.__add__(b)返回NotImplemented,则解释器会再尝试b.__add__(a);若所有尝试都返回NotImplemented,则引发TypeError(如1 + "2"会报错)。 - 版本变更(3.9+):在布尔上下文中求值(如
if NotImplemented:)已被弃用,目前虽会返回True,但会触发DeprecationWarning;未来版本将直接引发TypeError,务必避免此类用法。 - 特别提醒:不可与
NotImplementedError混淆!NotImplemented是“常量”,用于方法返回,告诉解释器“该运算没实现”;NotImplementedError是“异常”,用于主动抛出,表示“方法本身没被实现”(如def func(): raise NotImplementedError)。
1.5. Ellipsis
- 定义:与省略号字面值
...完全等价,常用于表示“省略内容”或“多维切片”(典型场景是NumPy,如arr[..., 0]表示取最后一维的第0个元素)。 - 类型特性:
Ellipsis是types.EllipsisType类型的唯一实例。 - 赋值差异:可对
Ellipsis赋值(如Ellipsis = 1,但强烈不推荐),但对...赋值(如... = 1)会引发SyntaxError。
1.6. __debug__
- 定义:布尔值常量,由Python启动方式决定:
- 未用
-O(优化)选项启动时,__debug__为True; - 用
-O选项启动时,__debug__为False(此时assert语句会被自动忽略)。
- 未用
- 核心关联:
assert语句的本质是“if __debug__: 检查表达式,不满足则抛AssertionError”——这也是为什么-O模式下assert会失效(因为__debug__为False,整个assert块被跳过)。 - 关键限制:赋值非法,会引发
SyntaxError,不可修改。
2. site模块添加的常量
site模块是Python启动时自动导入的(除非用-S命令行选项跳过),它会向内置命名空间添加一批常量——这些常量仅为了方便“交互式解释器”(如Python Shell、IPython)的使用,绝对不推荐在程序代码中依赖(如脚本、项目代码)。
2.1. quit(code=None) / exit(code=None)
- 功能:交互式环境中快速退出解释器。
- 行为细节:
- 直接打印对象(如输入
quit并回车):显示提示信息Use quit() or Ctrl-D (i.e. EOF) to exit; - 作为函数调用(如
quit()或exit(0)):引发SystemExit异常,code为退出码(默认None,对应退出码0,表示正常退出)。
- 直接打印对象(如输入
- 使用警告:程序代码中退出应使用
sys.exit()(需导入sys模块),而非quit()——因为site模块可能被-S选项跳过,导致quit()未定义。
2.2. help
- 功能:调用Python内置的帮助系统,查询语法、函数、类的文档。
- 行为细节:
- 直接打印对象(如输入
help并回车):显示提示信息输入 help() 可获取交互式帮助,或输入 help(object) 查看特定对象的帮助信息; - 调用方式:
- 输入
help():启动交互式帮助界面(可输入关键词查询); - 输入
help(str):查看str类的详细文档; - 输入
help(print):查看print函数的用法。
- 输入
- 直接打印对象(如输入
2.3. copyright
- 功能:查看Python的版权信息。
- 使用方式:直接打印(
print(copyright))或调用(copyright()),都会输出Python的版权文本(如“Copyright © 2001-2025 Python Software Foundation”)。
2.4. credits
- 功能:查看Python项目的贡献者信息。
- 使用方式:直接打印(
print(credits))或调用(credits()),输出所有为Python开发做出贡献的人员名单。
2.5. license
- 功能:查看Python的许可证协议(Python Software Foundation License v2)。
- 行为细节:
- 直接打印对象(如输入
license并回车):显示提示信息Type license() to see the full license text; - 调用(
license()):以分页形式(一屏显示完后按回车继续)展示完整的许可证文本。
- 直接打印对象(如输入
3. 注意事项与总结
- 区分“真正的常量”:
None、False、True、__debug__这四个常量绝对不能赋值,任何赋值操作都会引发SyntaxError,开发中需视为“只读值”。 NotImplemented的正确场景:仅在自定义类的“双目运算特殊方法”(如__add__)中返回,不可用于布尔判断(如if result is NotImplemented是合理的,if result则不合理),更不能替代NotImplementedError。site模块常量的边界:仅限交互式解释器使用,程序代码中应避免——比如退出用sys.exit(),查帮助用help()函数(虽help来自site,但help()本身是内置函数,可安全使用)。- 版本兼容性:若项目需兼容Python 3.9+,需注意
NotImplemented在布尔上下文的弃用问题,避免写出未来会报错的代码。
更多推荐



所有评论(0)