为什么 Python 里的 True 和 False 两个布尔值首字母要大写呢?

发布时间:
2023-08-24 12:25
阅读量:
14

这事还得从2002年的3月8日说起,有一个荷兰人,中午吃了顿中国菜,顺便在Python社区发了个提案,讨论要不要给Python加一个布尔数据类型,以及如何加这个数据类型。


在这之前,Python 使用整数 0 和 1 或"truthy" 和 "falsy" 值来表示布尔逻辑,但没有一个专门的布尔数据类型。


这个提案,围绕着布尔值的话题,讨论了8件事,他的说话风格就和python的风格一样,简短有力,每件事就说了一句话。从2002年的第一场雪,到现在二十多年过去了,我忘了很多事,但那三句话,却如余音袅袅,不绝如缕;散发出来的霸气,昨日种种,历历在目。


第一句:这个方案,行也得行,不行也得行! Should this PEP be accepted? => Yes.

第二句:别管返回 "1" 会不会更兼容,"True" 就是 "True",别想太多!Shouldstr(True)return “True” or “1”? => “True”.

第三句:其他语言怎么叫,我不管!什么C++,Java,C99,记住,这里是Python的地盘,我就叫它 'True' 和 'False',听懂还是听不懂? Should the constants be called ‘True’ and ‘False’ (similar to None) or ‘true’ and ‘false’ (as in C++, Java and C99)? => True and False.


那个荷兰人叫Guido van Rossum,人们管它叫龟叔,据说去谷歌面试,简历上就写了一句话,他写了个python。("I wrote Python")

龟叔


好了,开始说正经的。


那次提案就是PEP285[1]。PEP 是 Python Enhancement Proposal(Python 增强提案)的缩写,它是 Python 社区用于提出和讨论语言特性和库的变更或添加的标准化文档。每个 PEP 都有一个唯一的编号,PEP 285 就是其中一个。这个 PEP 正是由 Python 的创始人 Guido van Rossum 所写,并讨论是否以及如何在 Python 中添加一个布尔(boolean)数据类型。


在Reviews里, 龟叔面对激烈的反对意见,在深思熟虑后,还是决定坚持他原来的提案,并且不会做出任何改变。也因此, PEP 285 是一个非常重要的里程碑,因为它为 Python 语言添加了一个基础、重要且普遍使用的数据类型。正是这个决定,让True和False作为天选之子,成为我们今天看到的两个布尔值。


改编不是乱编,戏说不是胡说


Python大多数参与讨论的人认为,在设计这些常量的命名时,与 Python 语言内部保持一致性更为重要,而不是与其他编程语言(如 C++、Java 或 C99)保持一致。

python内部一致性


具体来说,Python 有其自己的命名和设计习惯,比如内置常量 None 也是首字母大写的。因此,为了保持一致性,大多数评审者认为 TrueFalse 也应该首字母大写,即便这与其他编程语言的习惯不同。


这种设计决策背后的逻辑,是编程语言不仅仅被看作一组功能或命令。它们也有自己的“文化”和一致性。正是这种一致性,使得学习和使用该语言更为直观,也更容易读懂和维护代码。因此,在这种情况下,内部一致性被认为比与其他语言的一致性更为重要。


举例来说,在Python 中有35个关键字[2],他们都不能作为变量。


Python关键字


并且绝大多数不能被赋值,如果强行赋值,则会报错。当然,这里有三个例外,分别是True,False,None这三个内置常量。当然,从外形上,他们还有一个共同点,即均是首字母大写。

内置常量可赋值


在这35个关键字中,True、False、None 作为唯三的常量,可以赋值给变量,均首字母大写,也是其注重一致性的体现。[3]

内置常量--官方文档



在python2中,True和False不是内置常量,可以被重新赋值,会出 True==False 这种情况,而这会产生某些隐患,让代码变得难以调试,降低了代码的可读性和可维护性。将True和False设置为内置常量,提升Python语言本身的健壮性。

python2中 True 可以被赋值


花絮:这查资料的过程中,才发现这个问题是stack overflow上的镜像问题[4]

stack overflow 问题

END