擅长:python、mysql、java
<p>行为是正确的。只是<code>fib(10)</code>是在调用<code>print</code>之前执行的。这是因为函数调用的参数必须在传递给函数之前执行</p>
<p>所以事实上,您确实要计算<code>fib(10)</code>(包括函数中的所有<code>print</code>),然后打印<code>fib</code>和<code>fib(10)</code>调用的结果(这是<code>None</code>,因为<code>fib</code>函数不包含显式的<code>return</code>)</p>
<p>也可以调用<code>dis.dis</code>查看求值顺序:</p>
<pre><code>def f():
print(fib, fib(10))
import dis
dis.dis(f)
</code></pre>
<p>结果:</p>
<pre>
10 0 LOAD_GLOBAL 0 (print)
2 LOAD_GLOBAL 1 (fib)
4 LOAD_GLOBAL 1 (fib)
6 LOAD_CONST 1 (10)
8 CALL_FUNCTION 1 > the fib(10) call
10 CALL_FUNCTION 2 > the print call
^ - number of arguments!
12 POP_TOP
14 LOAD_CONST 0 (None)
16 RETURN_VALUE
</pre>