gpt4 book ai didi

python - 为什么分配给 True/False 不能按我的预期工作?

转载 作者:IT老高 更新时间:2023-10-28 21:55:49 24 4
gpt4 key购买 nike

作为回答另一个问题的一部分,我编写了以下代码,乍一看其行为似乎很奇怪:

print True                    # outputs true
True = False; print True # outputs false
True = True; print True # outputs false
True = not True; print True # outputs true

谁能解释这种奇怪的行为?我认为这与 Python 的对象模型有关,但我不确定。

是Cygwin下的2.5.2版本。

最佳答案

Python 有这两个(以及其他)内置对象。它们只是对象;一开始,它们还没有任何名称,但要知道我们指的是什么,我们称它们为 0x600D0xBAD

在开始执行 Python (2.x) 脚本之前,名称 True 被绑定(bind)到对象 0x600D,名称 False 绑定(bind)到对象 0xBAD,所以当程序引用 True 时,它会查看 0x600D

因为 0x600D0xBAD 知道它们通常被名称 TrueFalse 使用,这就是它们在打印时输出,即 0x600D__str__ 方法返回 'True' 等等。

True = False

现在将名称 True 绑定(bind)到不同的对象。从现在开始,TrueFalse 这两个名称都指向同一个对象 0xBAD,它在打印时输出 False.

True = True

实际上并没有做任何事情:它获取名称 True 所引用的对象,并将新的(和旧的)名称 True 绑定(bind)到该对象。因为(因为上一步)True在这之前是指0xBAD,在这之后还是指0xBAD。因此,打印仍然输出 False

True = not True

首先获取名称True所绑定(bind)的对象,即0xBAD。它将此对象提供给 not 运算符。 not 不关心(或知道)这里使用什么名称来引用 0xBAD,它只知道当给定 0xBAD 时它应该返回0x600D。然后将此返回值提供给赋值运算符 =,将名称 True 绑定(bind)到此对象。

由于名称 True 现在再次引用对象 0x600D,调用 print True 输出 True,世界又美好了。

关于python - 为什么分配给 True/False 不能按我的预期工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2055029/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com