簡體   English   中英

使函數在Python中變得懶惰

[英]making function lazy in Python

我想為eternity編寫一個包裝函數,使它的行為就像被懶惰地求值一樣。 換句話說,其功能應與下面的功能lazyeternity相同。 我有這個函數packageN ,它接受一個函數並將其打包為lambda,或者至少我認為這樣做。 (將lazyeternity打包在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())

packageN返回的lazyeternityeternity之間的區別是,調用lazyeternity返回一個lambda,而eternity 一個lambda,當被調用時,它將永遠運行。

要使packageN返回類似於lazyeternity行為,請使其

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

要使兩個eternity起作用,只需刪除() 您想返回一個函數,而不是函數的求值(無限循環)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM