当前位置: 首页 > 知识库问答 >
问题:

if语句和if equals语句之间的差异[重复]

房子昂
2023-03-14

两者之间有实际区别吗

if statement:

if statement == True:

除了第一个更短之外,一个优先级更高,还是更慢?

编辑:

我意识到这可能并不清楚,但语句通常是语句=真的

共有2个答案

公冶高峯
2023-03-14

if语句:只要语句为真(一个int不等于'0',true,一个至少有一个元素列表,一个带有一个键、值对的dict,等等),则计算结果为真。

if语句==True:仅当语句True时才计算为True,即

>>> print(statement)
True
施靖
2023-03-14

这些是不平等的。Python允许您在大量元素上定义if语句。例如,你可以写:

if []: # is False
    pass
if 1425: # is True
    pass
if None: # is False
    pass

基本上如果你写如果

示例,如果x不等于x==True:

例如:

if 0.1:
    pass # will take this branch
else:
    pass

将取if分支,而:

if 0.1 == True:
    pass
else:
    pass # will take this branch

将不接受if分支。这是因为如果一个数字是一(11L10j,…),那么它就等于True。而如果x为非零,则数字的bool(x)True

也可以定义一个对象,其中==将引发异常。喜欢:

class Foo:

    def __eq__(self,other):
        raise Exception()

现在调用Foo()==True将导致:

>>> Foo() == True
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 3, in __eq__
Exception

但是,不建议在\uuuu eq\uuu函数中引发异常(无论如何,我强烈建议不要这样做)。

然而,它认为:如果

如果两者相等,显然

此外,检查集合是否为空通常更惯用:

some_list = []

if some_list: # check if the list is empty
    pass

这也是更安全的,因为如果某些列表可能是(或其他类型的集合),您仍然会检查它是否包含至少一个元素,因此稍微改变一下您的想法不会产生显著的影响。

所以,如果您必须编写if x==True,那么x本身的真实性通常会有些奇怪。

正如文档(Python-2.x/Python-3.x)中指定的那样。有一种方法可以解决真实性问题。

在python-2.x中,它的计算方式如下(过于简化的版本,更多的“伪python”代码来解释它的工作原理):

# Oversimplified (and strictly speaking wrong) to demonstrate bool(..)
# Only to show what happens "behind the curtains"
def bool(x):
    if x is False or x is None:
        return False
    if x == 0 or x == 0.0 or x == 0L or x == 0j:
        return False
    if x is () or x == [] or x == '' or x == {}:
        return False
    if hasattr(x,'__nonzero__'):
        y = x.__nonzero__()
        return y != 0 and y != False
    if hasattr(x,'__len__'):
        return x.__len__() != 0
    return True

以及python-3.x的过度简化版本:

# Oversimplified (and strictly speaking wrong) to demonstrate bool(..)
# Only to show what happens "behind the curtains"
def bool(x):
    if x is False or x is None:
        return False
    if x == 0 or x == 0.0 or x == 0j:
        return False
    if x is () or x == [] or x == '' or x == {}:
        return False
    if hasattr(x,'__bool__'):
        return x.__bool__() is True
    if hasattr(x,'__len__'):
        return x.__len__() != 0
    return True

 类似资料:
  • 这行代码是有效的C代码(至少可以编译),但无效的C代码(不能编译)。我知道两种语言之间有差异,但这次是出乎意料的。 我一直认为语法是 但这将使其在两种情况下都有效。 我的问题是: 为什么这个不能用C编译 为什么会存在这种差异

  • 着色器语言GLSL中关于if语句、for语句的使用,和javascript语言、C语言中的if语句、for语句执行逻辑规则基本一致,这里默认你已经有一定的编程基础,也就不做过多讲解,只是简单说明一下。 单独使用if if(x>100){ gl_FragColor = vec4(1.0,0.0,0.0,1.0);//红色 } if-else形式 bool colorBool; // 根据布尔值

  • 输出:<代码>编译错误。变量j可能尚未初始化。 为什么会这样呢?

  •  if 语句,就是类似于「如果○○的话,做●●」,根据条件判断脚本的一部分是否执行的语法。  语法如下: if(expression) 语句或语句块 else 语句或语句块  第一个“语句或语句块”是当 expression 表达式的结果为真时执行的部分,第二个“语句或语句块”则是结果为假时执行的部分。如果不需要 else 以后的部分,可以省略。 例: if(a==b) inform("a和b相等

  • 我正在学习一门在线编码课程,该课程导入了appstore上应用程序的大量数据,并要求我们计算出游戏或社交网络应用程序的平均评分。执行此操作时,我意外地键入了if语句,如上图所示: 这是我不明白的,总共有7197个应用程序,如果我使用上面的if语句,我的games\u social\u评级列表的长度是7197。游戏应用程序总数为3862,社交网络应用程序总数为167。7197是从哪里来的?当我输入上

  • 我所说的“空if语句”是指这样的东西(注意分号): 我在考虑这个应用程序时遇到了麻烦。使用time循环,您可以这样做: 但对于if语句没有这样的应用。此外,Java编译器在遇到此类语句时不会发出错误或警告。这可能会导致大而无声的问题,尤其是对于冗长而复杂的语句: 我的问题是:为什么Java中允许这样做?更重要的是,我是否可以启用一个选项,以便在发生这种情况时引发警告? (之前有人问过关于C#的这个