擅长:python、mysql、java
<p>简单的答案是,在编写时,代码将在每次函数调用时重复执行。对于您描述的情况,Python中没有隐式缓存机制。你知道吗</p>
<p>你应该改掉谈论“声明”的习惯。函数定义实际上也“只是”一个普通语句,因此我可以编写一个循环来重复定义同一个函数:</p>
<pre><code>for i in range(10):
def f(x):
return x*2
y = f(i)
</code></pre>
<p>在这里,我们将在每次循环运行时产生创建函数的成本。计时显示此代码的运行时间约为前一代码的75%:</p>
<pre><code>def f(x):
return x*2
for i in range(10):
y = f(i)
</code></pre>
<p>优化RE case的标准方法是将<code>p</code>变量放入模块范围,即:</p>
<pre><code>p = re.compile(r"QChar\((0x[a-fA-F0-9]*)\)")
def qcharToUnicode(s):
return p.sub(lambda m: '"' + chr(int(m.group(1),16)) + '"', s)
</code></pre>
<p>您可以使用诸如在变量前面加“\”这样的约定来表示不应该使用它,但是如果您没有记录它,人们通常不会使用它。使RE函数成为局部函数的一个技巧是使用有关默认参数的结果:它们与函数定义同时执行,因此可以执行以下操作:</p>
<pre><code>def qcharToUnicode(s, p=re.compile(r"QChar\((0x[a-fA-F0-9]*)\)")):
return p.sub(lambda m: '"' + chr(int(m.group(1),16)) + '"', s)
</code></pre>
<p>这将允许你同样的优化,但也有一点更灵活的匹配功能。你知道吗</p>
<p>正确地思考函数定义还可以让您不再将<code>lambda</code>视为不同于<code>def</code>。唯一的区别是<code>def</code>还将函数对象绑定到一个名称-创建的底层对象是相同的。你知道吗</p>