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

Python的in(__contains__)运算符返回布尔值,该布尔值既不是True也不是False

子车征
2023-03-14
问题内容

不出所料,空元组不包含1

>>> 1 in ()
False

但是False返回的值不等于False

>>> 1 in () == False
False

换一种方式来看,in运算符返回的abool既不是也不TrueFalse

>>> type(1 in ())
<type 'bool'>
>>> 1 in () == True, 1 in () == False
(False, False)

但是,如果对原始表达式加上括号,则会恢复正常行为

>>> (1 in ()) == False
True

或其值存储在变量中

>>> value = 1 in ()
>>> value == False
True

在Python 2和Python 3中都观察到此行为。

你能解释发生了什么吗?


问题答案:

您正在遇到比较运算符链接;1 in () == False没有 意思(1 in ()) == False

相反,比较是链接在一起的,该表达式的真正含义是:

(1 in ()) and (() == False)

因为(1 in ())已经为false,所以False and something_else将完全忽略链接表达式的后半部分(因为返回False的值something_else将是)。

请参阅比较表达式文档:

可以任意链接比较,例如x < y <= z与等效x < y and y <= z,不同之处在于y比较仅被评估一次(但在两种情况下zx < y被发现为假,则根本不评估)。

对于记录,<>==>=<=!=isis notinnot in都是比较运算符(如本弃用<>)。

通常,不要将其与布尔值进行比较;只是测试表达式本身。如果 必须
对布尔文字进行测试,则至少要使用括号和is运算符,True并且False它们是单例的,就像None

>>> (1 in ()) is False
True

当涉及整数时,这仍然变得更加令人困惑。Python的bool类型是子类int1。因此,False == 0确实如此True == 1。因此,可以想象到,您可以创建看起来理智的链接操作:

3 > 1 == True

是正确的,因为3 > 11 == True都正确。但是表达式:

3 > 2 == True

是错误的,因为2 == True是错误的。

1是出于历史原因的子类;Python并不总是像C那样具有类型和具有布尔含义的重载整数。制作子类可使较旧的代码正常工作。
bool``int``bool``bool



 类似资料:
  • 问题内容: 嗨,在Java中这样的事情是可能的吗? 澄清。上面的作品,但首先分配false。我想要实现的是尽快将其返回并随后将其重置。 结构看起来像这样: 我当时正打算一次过 问题答案: 不,没有内置功能可以满足您的描述。您可以使用一个临时变量来完成此操作: 或者根据您对问题的 进一步 编辑( “结构看起来像这样”) ,可以使用: 我 真的,真的不会那样做 。不必要的钝。

  • 我发现了这个语法: 这个有两个点的语法是什么:叫? 在哪里可以找到有关它的信息? 它是仅适用于布尔值还是以其他不同的方式实现?

  • 我在一节课上做了这个方法。我已经仔细检查过了,应该可以正常工作了。当我使用这个方法在main方法中运行一个对象时,我总是得到一个假返回,即使它应该是真的。 print语句不打印,所以我无法检查值是否正确传递,我还尝试让if语句也返回true,但它仍然返回false!它让我头疼,因为一切在逻辑上都是正确的。 有没有一个我不知道的规则,如果出现错误,布尔方法会自动返回false? 在主要方法中:

  • 契约已更改为返回,而不是从androidx开始的。活动版本1.2.0-alpha05。如何使用内置的AndroidResultContracts返回的contract访问和显示用户刚刚拍摄的照片?

  • 好的,我的问题是关于布尔返回。对于我的Comp-Sci作业,我必须使用多种方法制作一个课程注册程序,其中之一就是添加课程方法。基本上,在目录中搜索类,如果匹配,则将其添加到学生计划中,并返回布尔值true。我这么做了,但出于某种原因,这给了我一个错误。以下是代码: 为什么它不能识别布尔返回值?是因为我把它们放在了一个圈里吗?

  • 问题内容: 关于以下原因为何的任何想法。 当我将request_url粘贴到浏览器中时,我会获取json数据,但是如果我在php中尝试,则var_dump就是bool(false); 有任何想法吗?? 更新并修复 OK伙计们,感谢您的所有帮助。是的,我帮助我追踪了这一情况。事实证明,php.ini配置为禁止打开url,因此file_get_contents无法正常工作。我在各个站点上发现了以下方便