Function chaining in Python

前端 未结 6 1515
醉酒成梦
醉酒成梦 2020-11-27 11:17

On Codewars.com I encountered the following task:

Create a function add that adds numbers together when called in succession. So add(1

6条回答
  •  难免孤独
    2020-11-27 11:45

    If you want to define a function to be called multiple times, first you need to return a callable object each time (for example a function) otherwise you have to create your own object by defining a __call__ attribute, in order for it to be callable.

    The next point is that you need to preserve all the arguments, which in this case means you might want to use Coroutines or a recursive function. But note that Coroutines are much more optimized/flexible than recursive functions, specially for such tasks.

    Here is a sample function using Coroutines, that preserves the latest state of itself. Note that it can't be called multiple times since the return value is an integer which is not callable, but you might think about turning this into your expected object ;-).

    def add():
        current = yield
        while True:
            value = yield current
            current = value + current
    
    
    it = add()
    next(it)
    print(it.send(10))
    print(it.send(2))
    print(it.send(4))
    
    10
    12
    16
    

提交回复
热议问题