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

为什么分配True / False不能正常工作?

商高谊
2023-03-14
问题内容

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

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绑定到该对象0x600D,该名称已False绑定到该对象0xBAD,因此,当程序引用时True,它看起来为0x600D

因为0x600D并且0xBAD知道名称True和通常使用它们False,这就是它们在打印时输出的内容,即返回__str__方法等。0x600D``'True'

True = False

现在将名称绑定True到另一个对象。从现在开始,两个名称True和都False指向同一个对象0xBAD,该对象在打印时输出False

True = True

并没有真正做任何事情:它接受name所引用的对象True,并将新(旧)名称绑定True到该对象。由于(由于上一步)在此之前True引用0xBAD,因此仍在0xBAD此之后引用。因此,打印仍然输出False

True = not True

首先获取名称True绑定到的对象0xBAD。它将此对象提供给not操作员。not不在乎(或不知道)这里使用什么名字来指代0xBAD,它只是知道给定0xBAD它应该返回0x600D。然后将此返回值提供给赋值运算符=,将名称绑定True到该对象。

由于名称True现在再次指向object 0x600D,称为print Trueoutput True,因此世界再次美好。



 类似资料:
  • 我正在使用Java NIO,由于某种原因,我无法获得files.isHidden()来返回正确的布尔值。程序只是检查目录是否隐藏,如果隐藏,则使其可见,如果不隐藏,则使其隐藏。这就是我所拥有的: 它继续返回false并隐藏目录,尽管目录被隐藏。下面的代码使用旧的File类和Path类可以很好地工作。

  • 我一直在用SceneBuilder 9.0.1在IntelliJ上做一个项目。昨天,在NetBeans 8上做了一个小型项目,12之后由于某种原因没有启动新项目。一旦关闭所有内容并打开IntelliJ项目,fxml文档就无法使用SceneBuilder打开。对于这个问题,需要注意以下几点: 我使用的是9.0.1版,尽管v15也有同样的问题, 其中一个fxml文件的示例如下: 请帮助。

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

  • 我正在尝试制作一个简单的Pygame应用程序,其中一些颜色与它们下面的颜色混合。以下是我的代码: 代码列表1: 代码应该使黄色矩形与橙色矩形混合,蓝色矩形与绿色矩形混合。相反,我从中得到了一些东西: 对此: 正如你所看到的,黄色和蓝色矩形不仅与红色矩形(屏幕表面)相融合,而且还为橙色和绿色矩形开了一个洞,这样我们就可以通过它们看到红色矩形。

  • 为什么以下输出为True? 这将始终输出,即使条件似乎表明并非如此。如果我删除括号,那么它可以工作,但我不明白为什么。

  • 我试图在一个变量中保存得分为80分或80分以上的学生的姓名,但我无法使用filter进行保存,它返回整个对象,尽管我指定只打印这些对象的键值,即这些学生的姓名。 我的代码: 我怎样才能得到得分在80分以上的学生的名字?