在 Python 中使函数变得惰性

making function lazy in Python

我想为 eternity 编写一个包装函数,使其表现得好像正在被惰性求值。换句话说,它的功能应该与下面的函数 lazyeternity 相同。我有这个函数 packageN,它接受一个函数并将其打包到一个 lambda 中——或者至少我认为是这样。 (在 lambda 中打包 lazyeternityetest 的调用中延迟了它的评估。)我如何修改 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())

要使 eternity 都起作用,只需删除 ()。您想要 return 一个函数,而不是函数的求值(无限循环)。

lazyeternityeternity 之间的区别 return 由 packageN 编辑的是 lazyeternity return 调用 lambda,而 eternity 一个lambda,当被调用时,它会永远运行。

要使 packageN return 的行为类似于 lazyeternity,请使其成为

def packageN(f):
    return lambda: lambda *x: f(*x)