I'm trying to write a decorator in Python to limit the number of times a function is called in an amount of time. I anticipate using it like this:
@ratelimit(seconds=15)
def foo():
    print 'hello'
start = time.time()
while time.time() - start < 10:
    foo()
> 'hello'
> 'hello'
So the decorated function can be called a maximum of once every seconds. In terms of implementing it I have this, but it doesn't work as I'm not sure the correct way to persist the last_call between subsequent calls:
import time
def ratelimit(seconds=10):
    last_call = None # Never call decorated function
    def decorator(func):
        def wrapper(*args, **kwargs):
            if last_call is None or time.time() - last_call > seconds:
                result = func(*args, **kwargs)
                last_call = time.time()
                return result
            return wraps(func)(wrapper)
    return decorator