cam*_*mil 7 python coding-style
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()
Run Code Online (Sandbox Code Playgroud)
关于编码风格:我经常使用前者当下面的块,或者最后一个块是一大块代码.它似乎有助于提高可读性.
当各种块具有贯穿它们的共同概念时,我通常使用后者(如上面的情况).常见的缩进有助于沟通他们的关系.
这两个值得注意的是否有任何差异(尤其是表现明智)?
风格方面,我发现第二个例子在眼睛上更容易.
在所有其他方面,没有区别.这两个函数编译为相同的字节码:
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
Run Code Online (Sandbox Code Playgroud)
(为了100%准确,第二个版本return None
在结尾处有隐式.但是,由于此代码不可访问,因此不会影响性能.)