<p>我想为<code>eternity</code>编写一个包装器函数,使其表现得像是在懒洋洋地求值。换句话说,它的功能应该与下面的函数<code>lazyeternity</code>相同。我有一个函数<code>packageN</code>,它接受一个函数并将其打包到lambda中——或者至少我认为是这样。(将<code>lazyeternity</code>封装在lambda中延迟了对<code>etest</code>的调用)如何修改<code>packageN</code>以便<code>eternity = packageN(eternity)</code>能够反映{<cd2>}的行为?在</p>
<pre><code> def eternity():
return eternity()
# How can I create a wrapper function for eternity...
# that will make it behave identical to this function?
def lazyeternity():
return lambda: lazyeternity()
def packageN(f):
return lambda *x: f(*x)
def etest(x, y):
return x
eternity = packageN(eternity)
# I want these both to return 4.
# Currently only the first one returns 4,...
# because the second one evaluates the eternity()...
# parameter forever. I want to delay the evaluation...
# of the parameter.
print etest(4, lazyeternity())
print etest(4, eternity())
</code></pre>