Python if语句中有括号和无括号的区别

Python if语句中有括号和无括号的区别,python,Python,在python中,if语句可以包含括号,也可以不包含括号: if True: pass if (True): pass 这两者之间有什么区别,甚至是性能上的差异吗?在Python中,括号是不需要的。您通常使用它们对长而复杂的表达式进行分组。与大多数语言一样,会忽略额外的括号。在Python中,if语句根本不需要任何代码。这两个语句都是相同的。正如编译的字节码所示 >>> from dis import dis >>> dis(compile

在python中,
if
语句可以包含括号,也可以不包含括号:

if True:
    pass

if (True):
    pass

这两者之间有什么区别,甚至是性能上的差异吗?

在Python中,括号是不需要的。您通常使用它们对长而复杂的表达式进行分组。

与大多数语言一样,会忽略额外的括号。在Python中,
if
语句根本不需要任何代码。这两个语句都是相同的。

正如编译的字节码所示

>>> from dis import dis
>>> dis(compile("if True: pass", "string", "exec"))
  1           0 LOAD_NAME                0 (True)
              3 POP_JUMP_IF_FALSE        9
              6 JUMP_FORWARD             0 (to 9)
        >>    9 LOAD_CONST               0 (None)
             12 RETURN_VALUE        
>>> dis(compile("if (True): pass", "string", "exec"))
  1           0 LOAD_NAME                0 (True)
              3 POP_JUMP_IF_FALSE        9
              6 JUMP_FORWARD             0 (to 9)
        >>    9 LOAD_CONST               0 (None)
             12 RETURN_VALUE        
他们之间根本没有区别。我能想到两件事

  • 当您希望对条件进行逻辑分组时,可能需要使用parens。比如说,

    if 10/5 == 2 and 2*5 == 10:
        pass
    
    这样看起来会更好

    if (10/5 == 2) and (2*5 == 10):
        pass
    
  • 你可以尽可能避免使用paren,使条件更像英语句子


  • 要记住的另一件事是对条件句进行分组

    在括号中包含条件可以稍微改变预期的顺序:

    x = True
    y = True
    z = True
    
    if x==False and y==False or z==True:
        print 'foo'  # This will print
    
    if x==False and (y==False or z==True):
        print 'bar'  # This will not print
    

    如果(x==False和y==False)或z==True,则第一条语句应被解读为

    第二条语句很难看;第一个不是。你的答案和X没有区别!