擅长:python、mysql、java
<p>如果你必须这样做(函数查找实际上是主要的成本吗?随机数生成并不便宜)您应该意识到一个全局+一个attr查找(<code>MyClass._normal</code>)并不比一个全局+三个attr查找(<code>numpy.random.normal</code>)便宜多少。您真正想要的是在循环中获得<em>zero</em>全局或attr查找,这只能通过在函数</em>内定义<code>_normal</code><em>来实现。如果您真的很想缩短周期,还应该预先绑定list append调用:</p>
<pre><code>class MyClass(MyBaseClass):
def run(self):
_normal = numpy.random.normal
_Lappend = self.L.append
while True:
...
_Lappend(_normal(0,1))
</code></pre>
<p>对比反汇编输出(仅用于<code>append</code>语句):</p>
^{pr2}$
<p>与</p>
<pre><code> LOAD_FAST 2 (_Lappend)
LOAD_FAST 1 (_normal)
LOAD_CONST 1 (0)
LOAD_CONST 2 (1)
CALL_FUNCTION 2
CALL_FUNCTION 1
</code></pre>
<p>更好的方法是向量化生成许多随机法线偏离,并一次性将它们附加到列表中,可以使用<code>size</code>参数对<code>numpy.random.normal</code>执行此操作。在</p>