这两个函数在被调用时似乎返回相同的值。但是,我想知道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
感谢您分享知识!
答案 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关于早期回报。