user1837378 user1837378 - 1 year ago 130
Python Question

making function lazy in Python

I want to write a wrapper function for

that will make it behave as if it's being lazily evaluated. In other words, its functionality should be made identical to that of the function
below. I have this function
that takes a function and packages it into a lambda--or at least I think it does. (Packaging
inside a lambda delayed its evaluation in the call of
.) How can I modify
so that
eternity = packageN(eternity)
can mirror the behavior of

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

Answer Source

The difference between lazyeternity and eternity as returned by packageN is that calling lazyeternity returns a lambda, whereas eternity is a lambda which, when called, runs forever.

To make packageN return something that acts like lazyeternity, make it

def packageN(f):
    return lambda: lambda *x: f(*x)
Recommended from our users: Dynamic Network Monitoring from WhatsUp Gold from IPSwitch. Free Download