擅长:python、mysql、java
<p>你说得对,如果不向cython函数中的<code>board</code>参数添加类型,那么加速就不会太快:</p>
<pre><code>%timeit py_playout(board, 1000)
# 321 ms ± 19.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)
%timeit cy_playout(board, 1000)
# 186 ms ± 541 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
</code></pre>
<p>但还是快了两倍。通过添加类型,例如</p>
^{pr2}$
<p>速度更快(几乎快10倍):</p>
<pre><code>%timeit cy_playout(board, 1000)
# 38.7 ms ± 1.84 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
</code></pre>
<p>我还使用了<code>timeit</code>(好的,IPython魔术<code>%timeit</code>)来获得更精确的计时。在</p>
<hr/>
<p>请注意,您还可以使用<a href="/questions/tagged/numba" class="post-tag" title="show questions tagged 'numba'" rel="tag">numba</a>来获得很好的加速效果,而无需任何额外的静态类型:</p>
<pre><code>import numba as nb
nb_playout = nb.njit(py_playout) # Just decorated your python function
%timeit nb_playout(board, 1000)
# 37.5 ms ± 154 µs per loop (mean ± std. dev. of 7 runs, 10 loops each)
</code></pre>