2025-10-08 Python 标准库 3——内置常量
文章目录
- 1. 内置常量
- 1.1. `False`
- 1.2. `True`
- 1.3. `None`
- 1.4. `NotImplemented`
- 1.5. `Ellipsis`
- 1.6. `__debug__`
- 2. `site`模块添加的常量
- 2.1. `quit(code=None)` / `exit(code=None)`
- 2.2. `help`
- 2.3. `copyright`
- 2.4. `credits`
- 2.5. `license`
- 3. 注意事项与总结
在Python中,有一批特殊的值被称为“内置常量”——它们无需导入任何模块,直接存在于内置命名空间中,是Python语言底层提供的基础值。这些常量分为两类:一类是核心功能依赖的 核心内置常量,另一类是
site
模块自动添加的
交互式专用常量(仅用于解释器交互场景)。
参考文档:内置常量 — Python 3.13.7 文档
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
在布尔上下文的弃用问题,避免写出未来会报错的代码。