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

为什么“ [False,True]中的not(True)”返回False?

薛钧
2023-03-14
问题内容

如果我这样做:

>>> False in [False, True]
True

那又回来了True。仅仅是因为False在列表中。

但是,如果我这样做:

>>> not(True) in [False, True]
False

那又回来了False。而not(True)等于False

>>> not(True)
False

为什么?


问题答案:

运算符优先级
2.x,3.x。的优先级not低于的优先级in。因此,它等效于:

>>> not ((True) in [False, True])
False

这就是你想要的:

>>> (not True) in [False, True]
True

正如@Ben指出的那样:建议从不写作not(True),更喜欢not True。前者使它看起来像一个函数调用,而它却not是一个运算符,而不是一个函数。



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

  • 问题内容: MDC对操作员的描述如下: 如果两个操作数的类型不同,则JavaScript会转换操作数,然后进行严格比较。如果操作数是数字或布尔值,则在可能的情况下将操作数转换为数字;否则,操作数将转换为数字。否则,如果其中一个操作数是字符串,则另一个操作数将尽可能转换为字符串。 考虑到这一点,我将评估如下: 它们是同一类型吗? 没有 操作数是数字还是布尔值? 是 我们可以将它们都转换为数字吗? 否

  • 问题内容: 我莫名其妙地迷糊了自己。 不知何故,我想到用AJAX(如$ .post)打PHP时,您必须回显“ true”或“ false”,而不是返回true / false。我现在知道不是这种情况,但是有人可以为我分解吗? 测试布尔值是否存在问题?像这儿 那是有问题的情况,对吗?在这里,我不能返回true / false,而是必须回显一个字符串并测试该字符串,是吗? 但是我看到布尔true /

  • 问题内容: 据我所知,使用或实例化对象分别返回或的新实例。具有 新标识 的新实例对象。 在我实际测试它之前,这对我来说是很清楚的,我注意到它实际上返回了而不是预期的: 如预期的那样,分别使用和创建对象时,也会表现出这种行为: 我可以在状态文档中找到唯一相关的信息: […]例如,return和return 。 如果未提供任何参数,则构造函数将创建一个新的空元组。 可以说,这不足以回答我的问题。 那么

  • 问题内容: 将布尔值与Python中的作品进行比较。但是,当我应用布尔运算符时,结果是语法错误: 为什么这是语法错误?我希望它是一个返回布尔值的表达式,并且只要是具有有效语法的表达式,它都是有效语法。 问题答案: 它与Python中的运算符优先级有关(解释器认为您正在比较True与Not,因为它的优先级高于)。您需要一些括号来阐明操作顺序: 通常,不能在没有括号的比较右侧使用。但是,我想不出您需要

  • 为什么当使用括号时,这些语句会像预期的那样工作: 但是当没有括号时,它返回?