如何在Python交互模式下撤销True = False?
所以我尝试了Ned Deily在他的回答中提到的“邪恶”事情。 现在我已经知道Truetypes现在总是False。 我如何在交互式窗口中反转这个?
事情不要做:
True = False
由于True现在已被False完全覆盖,似乎没有明显的回溯方式。 是否有一个真正的来自我可以做类似的模块:
True = <'module'>.True
您可以简单地del
您的自定义名称以将其设置恢复为默认值:
>>> True = False >>> True False >>> del True >>> True True >>>
这工作:
>>> True = False >>> True False >>> True = not False >>> True True
但是如果False
被弄乱了也会失败。 因此,这是更好的:
>>> True = not None
因为None
不能被重新分配。
无论True
是否被重新分配到False
,这些也都评价为True
, 5
, 'foo'
, None
等:
>>> True = True == True # fails if True = float('nan') >>> True = True is True >>> True = not True or not not True >>> True = not not True if True else not True >>> True = not 0
其他方式:
>>> True = 1 == 1 >>> False = 1 == 2
为了完整性,Kevin提到你也可以从__builtins__
获取真实的True
:
>>> True = False >>> True False >>> True = __builtins__.True >>> True True
但是,这也可以被覆盖:
>>> __builtins__.True = False >>> __builtins__.True False
所以更好的去与其他选项之一。
只要这样做:
True = bool(1)
或者,因为布尔值本质上是整数:
True = 1
解决scheme不使用对象字面值,但像1 == 1
一样持久。 当然,一旦定义了True,你就可以定义False,所以我将提供解决scheme。
def f(): pass class A(): pass True = not f() False = A != A
False = not (lambda:_).__gt__(_) True = not (lambda:_).__doc__