我想为eternity
编写一个包装函数,使其表现得好像被懒惰地评估一样。换句话说,它的功能应该与下面的函数lazyeternity
的功能相同。我有这个函数packageN
,它接受一个函数并将它打包成一个lambda - 或者至少我认为它。 (lambda中的lazyeternity
打包在etest
的调用中延迟了其评估。)如何修改packageN
以便eternity = packageN(eternity)
可以反映lazyeternity
的行为?
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())
答案 0 :(得分:2)
lazyeternity
返回的eternity
和packageN
之间的区别在于调用lazyeternity
返回lambda,而eternity
是一个lambda,当被称为,永远运行。
要让packageN
返回类似lazyeternity
的内容,请将其设为
def packageN(f):
return lambda: lambda *x: f(*x)
答案 1 :(得分:1)
要同时使eternity
工作,只需删除()
。您想要返回一个函数,而不是函数的评估(无限循环)。