[英]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
返回的lazyeternity
和eternity
之間的區別是,調用lazyeternity
返回一個lambda,而eternity
是一個lambda,當被調用時,它將永遠運行。
要使packageN
返回類似於lazyeternity
行為,請使其
def packageN(f):
return lambda: lambda *x: f(*x)
要使兩個eternity
起作用,只需刪除()
。 您想返回一個函數,而不是函數的求值(無限循環)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.