在Python中使函数变懒

2024-09-26 22:51:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我想为eternity编写一个包装器函数,使其表现得像是在懒洋洋地求值。换句话说,它的功能应该与下面的函数lazyeternity相同。我有一个函数packageN,它接受一个函数并将其打包到lambda中——或者至少我认为是这样。(将lazyeternity封装在lambda中延迟了对etest的调用)如何修改packageN以便eternity = packageN(eternity)能够反映{}的行为?在

    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())

Tags: thetolambda函数returnparameterdeffunction
2条回答

要使eternity都工作,只需删除{}。您想要返回一个函数,而不是函数的求值(无限循环)。在

packageN返回的lazyeternity和{}之间的区别在于,调用lazyeternity返回lambda,而{}是一个lambda,当被调用时,它将永远运行。在

要使packageN返回类似lazyeternity的内容,请将其

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

相关问题 更多 >

    热门问题