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

Sna*_*fee 39 python keyword

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

根据我自己的推测,我只能猜测这是为了防止像这样True, False = False, True恶作剧来自旧的恶作剧.但是,在Python 2.7.5中,也许在之前,None = 3重新分配的语句None引发了SyntaxError: cannot assign to None.

在语义上,我不相信True,False并且None是关键词,因为它们最后是语义文字,这就是Java所做的.我检查了PEP 0(索引),我找不到PEP解释它们被改变的原因.

是否有性能优势或其他原因使它们成为关键字而不是文字或特殊None包装它们就像在python2中?

dev*_*ull 45

可能是因为Python 2.6不仅允许,True = False而且还允许你说出有趣的事情:

__builtin__.True = False
Run Code Online (Sandbox Code Playgroud)

这将重置TrueFalse整个过程.它可以导致真正有趣的事情发生:

>>> import __builtin__
>>> __builtin__.True = False
>>> True
False
>>> False
False
>>> __builtin__.False = True
>>> True
False
>>> False
False
Run Code Online (Sandbox Code Playgroud)

编辑:正如迈克所指出的,Python维基也在核心语言变化下声明了以下内容:

  • 制作真假关键词.
    • 原因:无法分配给他们.

  • @SnakesandCoffee使None成为常数的举动是暂时的.请参阅http://mail.python.org/pipermail/python-dev/2004-July/046294.html (2认同)

Kro*_*tan 11

主要有两个原因:

  1. 所以人们不会__builtin__.True = False在随机模块上隐藏恶作剧.(由devnull解释)
  2. 因为关键字比全局内置更快.在Python 2.x中,解释器必须在使用它们之前解析这些变量的值,这比关键字慢一点.(请参阅为什么如果True比1慢?)