1

虽然True,False内置常量,但 Python 中允许以下内容。

>>> True = False
>>> a = True
>>> b = False
>>> print a,b
False False

为什么允许这样做的任何参考?

编辑:这只发生在 Python 2.x 中(正如所有指出的那样)。

4

3 回答 3

9

我认为“我们在这里都是成年人”的蟒蛇意识形态也适用于此。Python 没有私有类成员,因为没有真正好的理由来阻止用户弄乱某些东西……如果他们到处乱搞他们不理解的东西,那么当代码中断时,他们将得到应得的东西. 重新分配内置函数的能力也是如此……

list = tuple

请注意,您询问的情况在 python 3.x 中被明确禁止,但您仍然可以分配给 builtins ...

>>> True = False
  File "<stdin>", line 1
SyntaxError: assignment to keyword
>>> list = tuple
于 2013-02-20T12:13:02.833 回答
4

请记住,这只发生在 Python 3 之前的 Python 版本中。这是 Python 哲学的一部分,即一切都应该是动态的。

事实上在 Python 2True中不是关键字。它是绑定bool 对象的引用。您可以在您的 python 2.x vm 中尝试它:

>>> type(True)
<type 'bool'>

在 python 3 中,它被更改为关键字,并且尝试重新绑定引用会导致异常:

>>> True = []
  File "<stdin>", line 1
SyntaxError: assignment to keyword
于 2013-02-20T12:19:58.533 回答
1

传统上,Python 在设计时使用了语法所需的尽可能少的关键字;在 py3K 之前,True 和 False 不被认为是必要的关键字。除非 Guido 在关闭之前遇到这个问题,否则您可能不会得到很好的答案。(但这个线程说明了为什么它没有更早地改变)

于 2013-02-20T12:16:35.850 回答