当函数只有1个if语句时,函数是否需要else / elif?

时间:2019-01-02 10:55:56

标签: python

这两个函数在被调用时似乎返回相同的值。但是,我想知道2在某些情况下是否会引发错误?这样做是不好的做法吗?

数字1:

def not_sum_to_ten(num1, num2):
  if num1 + num2 != 10:
    return True
  else:
    return False

数字2:

def not_sum_to_ten(num1, num2):
  if num1 + num2 != 10:
    return True
  return False

感谢您分享知识!

3 个答案:

答案 0 :(得分:6)

您也不需要if语句,只需返回!=运算符的结果:

def not_sum_to_ten(num1, num2):
    return num1 + num2 != 10

关于原始问题,这两个功能是等效的。但是,第二种形式更简洁,效率也更高,因为它不需要解释器为函数加载默认的返回值None。您可以使用dis.dis()分解功能对象并检查字节码:

  2           0 LOAD_FAST                0 (num1)
              2 LOAD_FAST                1 (num2)
              4 BINARY_ADD
              6 LOAD_CONST               1 (10)
              8 COMPARE_OP               3 (!=)
             10 POP_JUMP_IF_FALSE       16

  3          12 LOAD_CONST               2 (True)
             14 RETURN_VALUE

  5     >>   16 LOAD_CONST               3 (False)
             18 RETURN_VALUE
             20 LOAD_CONST               0 (None)
             22 RETURN_VALUE

vs

  9           0 LOAD_FAST                0 (num1)
              2 LOAD_FAST                1 (num2)
              4 BINARY_ADD
              6 LOAD_CONST               1 (10)
              8 COMPARE_OP               3 (!=)
             10 POP_JUMP_IF_FALSE       16

 10          12 LOAD_CONST               2 (True)
             14 RETURN_VALUE

 11     >>   16 LOAD_CONST               3 (False)
             18 RETURN_VALUE

答案 1 :(得分:0)

这两个函数的作用完全相同。实际上,如果不需要的话,最好不要使用elif。

答案 2 :(得分:0)

第二种方法中的内容实际上更具可读性,并且(可以说)具有更多的Python语言。这种方法在编写可以尽早做出决策的函数时非常有用,例如:

def get_data(user, token):
    if not verify(user, token):
        return AuthException()
    // Do actual fetching

与添加另一个else相比,这非常容易理解。 Read more关于早期回报。