对于它的价值,在 Python 中,在特定执行分支上的函数中可能发生的任何事情都必须在函数结束之前发生:
In [6]: import dis
In [7]: def fun():
...: return 42
...:
In [8]: dis.dis(fun)
2 0 LOAD_CONST 1 (42)
2 RETURN_VALUE
在简单的情况下,只有 42,常量被加载。
但是更复杂一点的东西呢,比如try
带有return
内部的 a 呢?
In [9]: def fun_with_exceptions():
...: try:
...: return 42
...: finally:
...: print('Returning')
...:
结果是:
In [11]: dis.dis(fun_with_exceptions)
2 0 SETUP_FINALLY 4 (to 6)
3 2 LOAD_CONST 1 (42)
4 RETURN_VALUE
5 >> 6 LOAD_GLOBAL 0 (print)
8 LOAD_CONST 2 ('Returning')
10 CALL_FUNCTION 1
12 POP_TOP
14 END_FINALLY
16 LOAD_CONST 0 (None)
18 RETURN_VALUE
finally 中的所有内容仍然在函数实际返回之前执行 - 所以后置条件的定义为
函数结束前应满足的要求。
仍然是完全有效的。