当前位置: 首页 > 面试题库 >

为什么在Python 3中将True和False更改为关键字

张通
2023-03-14
问题内容

在Python
2中,我们可以重新分配TrueFalse(但不包括None),但所有这三个(TrueFalse,和None)被认为是内置变量。然而,在Py3k所有三个分别更改为关键字按该文档。

根据我自己的推测,我只能猜测这是为了防止这种源自旧True, False = False, True恶作剧的恶作剧。但是,在Python 2.7.5中,以及之前的版本中,诸如None = 3reassigned的语句将None引发SyntaxError: cannot assign to None

在语义上,我不相信TrueFalseNone是关键字,因为它们最终在语义上是文字,这是Java所做的。我检查了PEP
0(索引),却找不到说明为什么更改它们的PEP。

None在python2中那样,使它们成为关键字而不是文字或特殊大小写是否有性能优势或其他原因?


问题答案:

可能是因为Python 2.6不仅允许True = False而且允许您说一些有趣的事情,例如:

__builtin__.True = False

这将重置TrueFalse整个过程。这可能导致发生非常有趣的事情:

>>> import __builtin__
>>> __builtin__.True = False
>>> True
False
>>> False
False
>>> __builtin__.False = True
>>> True
False
>>> False
False

编辑 :正如Mike所指出的,Python
Wiki
在“ 核心语言更改” 下也声明了以下内容:

  • 设为True和False关键字。
    • 原因:无法分配给他们。


 类似资料:
  • 在Python2中,将它们设置为关键字而不是文字,或者将它们设置为特殊的大小写,比如,是否有性能优势或其他原因?

  • 问题内容: MDC对操作员的描述如下: 如果两个操作数的类型不同,则JavaScript会转换操作数,然后进行严格比较。如果操作数是数字或布尔值,则在可能的情况下将操作数转换为数字;否则,操作数将转换为数字。否则,如果其中一个操作数是字符串,则另一个操作数将尽可能转换为字符串。 考虑到这一点,我将评估如下: 它们是同一类型吗? 没有 操作数是数字还是布尔值? 是 我们可以将它们都转换为数字吗? 否

  • 问题内容: 使用括号时,这些语句为什么能按预期工作: 但是 ,如果没有括号,它会返回吗? 问题答案: 基于有关操作符优先级的python 文档 : 请注意,比较,成员资格测试和身份测试均具有相同的优先级,并且具有“比较”部分中所述的从左到右的 链接 功能。 因此,实际上您有一个链接语句,如下所示: 您可以假定中心对象将在2个操作和其他对象之间共享(在这种情况下为False)。 并且请注意,对于所有

  • 问题内容: 如果我这样做: 那又回来了。仅仅是因为在列表中。 但是,如果我这样做: 那又回来了。而等于: 为什么? 问题答案: 运算符优先级 2.x,3.x。的优先级低于的优先级。因此,它等效于: 这就是你想要的: 正如@Ben指出的那样:建议从不写作,更喜欢。前者使它看起来像一个函数调用,而它却是一个运算符,而不是一个函数。

  • 问题内容: 题 对于扫描仪对象,该方法返回true,而该方法返回false的结果又如何呢? 注意:根据输入文件,该方法将按预期返回结果。在似乎没有被返回正确的结果。 码 这是我正在运行的创建以下结果的代码: 输入文件 以下是我传递给此扫描仪的文件的实际内容: 结果 以下是我运行代码时控制台中显示的内容的结尾,其中包括我无法理解的部分: 问题答案: 文件末尾有一个额外的换行符。 检查缓冲区中是否还有

  • 为什么当使用括号时,这些语句会像预期的那样工作: 但是当没有括号时,它返回?