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

Jak*_*ake 1 python

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

1号:

def not_sum_to_ten(num1, num2):
  if num1 + num2 != 10:
    return True
  else:
    return False
Run Code Online (Sandbox Code Playgroud)

2号:

def not_sum_to_ten(num1, num2):
  if num1 + num2 != 10:
    return True
  return False
Run Code Online (Sandbox Code Playgroud)

感谢您分享您的知识!

Eug*_*ash 6

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

def not_sum_to_ten(num1, num2):
    return num1 + num2 != 10
Run Code Online (Sandbox Code Playgroud)

关于原始问题,这两个函数是等价的.但是,第二种形式更简洁,效率更高,因为它不需要解释器加载函数的默认返回值,即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
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)