Python 如果我已经从上一个块中的函数返回,是否应该使用elif? def大小(编号): 如果number
您只能通过基准测试/计时来了解特定情况下的性能(或者如@aix所示,查看翻译后的代码,假设代码段足够小) 话虽如此,我认为第二个示例的语义更加清晰,因为语言结构表明选项是互斥的Python 如果我已经从上一个块中的函数返回,是否应该使用elif? def大小(编号): 如果number,python,coding-style,Python,Coding Style,您只能通过基准测试/计时来了解特定情况下的性能(或者如@aix所示,查看翻译后的代码,假设代码段足够小) 话虽如此,我认为第二个示例的语义更加清晰,因为语言结构表明选项是互斥的 一般来说,给定相同的功能,一个if/elif/else子句应该比一系列if-语句更有效,其中多个if语句可以按顺序执行/评估,即使之前的if语句被发现为真。在这个特定的代码示例中,情况并非如此,因为只要执行了if语句的相应主体,就会执行返回 在所有其他方面,没有区别。这两个函数编译为相同的字节码: def size(nu
一般来说,给定相同的功能,一个
if/elif/else
子句应该比一系列if
-语句更有效,其中多个if
语句可以按顺序执行/评估,即使之前的if
语句被发现为真。在这个特定的代码示例中,情况并非如此,因为只要执行了if
语句的相应主体,就会执行返回
在所有其他方面,没有区别。这两个函数编译为相同的字节码:
def size(number):
if number<100:
return Small()
if number<1000:
return Medium()
return Big()
def size1(number):
if number<100:
return Small()
elif number<1000:
return Medium()
else:
return Big()
[3]中的:dis.dis(大小)
2 0加载速度0(数字)
3负载常数1(100)
6比较运算0(>19加载速度0(数字)
22负载常数2(1000)
25比较操作0(>38负载\u全局2(大)
41调用函数0
44返回值
In[4]:dis.dis(尺寸1)
11 0加载速度0(数字)
3负载常数1(100)
6比较运算0(>19加载速度0(数字)
22负载常数2(1000)
25比较操作0(>38负载\u全局2(大)
41调用函数0
44返回值
45负载常数0(无)
48返回值
(为了100%准确,第二个版本的末尾有一个隐式的返回None
。但是,由于无法访问此代码,因此不会影响性能。)第二个示例更具可读性。
In [3]: dis.dis(size)
2 0 LOAD_FAST 0 (number)
3 LOAD_CONST 1 (100)
6 COMPARE_OP 0 (<)
9 POP_JUMP_IF_FALSE 19
3 12 LOAD_GLOBAL 0 (Small)
15 CALL_FUNCTION 0
18 RETURN_VALUE
5 >> 19 LOAD_FAST 0 (number)
22 LOAD_CONST 2 (1000)
25 COMPARE_OP 0 (<)
28 POP_JUMP_IF_FALSE 38
6 31 LOAD_GLOBAL 1 (Medium)
34 CALL_FUNCTION 0
37 RETURN_VALUE
8 >> 38 LOAD_GLOBAL 2 (Big)
41 CALL_FUNCTION 0
44 RETURN_VALUE
In [4]: dis.dis(size1)
11 0 LOAD_FAST 0 (number)
3 LOAD_CONST 1 (100)
6 COMPARE_OP 0 (<)
9 POP_JUMP_IF_FALSE 19
12 12 LOAD_GLOBAL 0 (Small)
15 CALL_FUNCTION 0
18 RETURN_VALUE
13 >> 19 LOAD_FAST 0 (number)
22 LOAD_CONST 2 (1000)
25 COMPARE_OP 0 (<)
28 POP_JUMP_IF_FALSE 38
14 31 LOAD_GLOBAL 1 (Medium)
34 CALL_FUNCTION 0
37 RETURN_VALUE
16 >> 38 LOAD_GLOBAL 2 (Big)
41 CALL_FUNCTION 0
44 RETURN_VALUE
45 LOAD_CONST 0 (None)
48 RETURN_VALUE