如果我写:
if a == b:
# do something
elif a == c:
# do something else
我只是想通过,否则,最后是否需要写出以下内容?:
else:
pass
它似乎运行良好,没有else:
口译员中的声明,是否有一个我不知道的原因我应该始终包括在内else: pass
在这些情况下?
不,不是,那个else
套房完全是可选的。
来自if声明文件:
if_stmt ::= "if" expression ":" suite
( "elif" expression ":" suite )*
["else" ":" suite]
where (...)*
means 零个或多个, and [...]
means optional。所以一个有效的if
复合语句有一个if
系列和套件,0 或更多elif
行和相应的组,最多一个else
line 和 suite,这是可选的。
Python 编译器将忽略任何else: pass
块,包含它确实没有意义:
>>> import dis
>>> dis.dis(compile('''\
... if True:
... foo
... else:
... pass
... ''', '<stdin>', 'exec'))
1 0 LOAD_NAME 0 (True)
3 POP_JUMP_IF_FALSE 13
2 6 LOAD_NAME 1 (foo)
9 POP_TOP
10 JUMP_FORWARD 0 (to 13)
4 >> 13 LOAD_CONST 0 (None)
16 RETURN_VALUE
>>> dis.dis(compile('''\
... if True:
... foo
... ''', '<stdin>', 'exec'))
1 0 LOAD_NAME 0 (True)
3 POP_JUMP_IF_FALSE 13
2 6 LOAD_NAME 1 (foo)
9 POP_TOP
10 JUMP_FORWARD 0 (to 13)
>> 13 LOAD_CONST 0 (None)
16 RETURN_VALUE
其中唯一的区别是附加到的行号LOAD_CONST
字节码,因为第一个源示例中存在额外的行。
从风格上来说,else: pass
只是混乱,降低可读性。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)