在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): ...)。
  • 类型特性NoneNoneType类型的唯一实例——也就是说,世界上只有一个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个元素)。
  • 类型特性Ellipsistypes.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. 注意事项与总结

  1. 区分“真正的常量”NoneFalseTrue__debug__这四个常量绝对不能赋值,任何赋值操作都会引发SyntaxError,开发中需视为“只读值”。
  2. NotImplemented的正确场景:仅在自定义类的“双目运算特殊方法”(如__add__)中返回,不可用于布尔判断(如if result is NotImplemented是合理的,if result则不合理),更不能替代NotImplementedError
  3. site模块常量的边界:仅限交互式解释器使用,程序代码中应避免——比如退出用sys.exit(),查帮助用help()函数(虽help来自site,但help()本身是内置函数,可安全使用)。
  4. 版本兼容性:若项目需兼容Python 3.9+,需注意NotImplemented在布尔上下文的弃用问题,避免写出未来会报错的代码。
Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐