Using our best practices for modules, refactor the code for this exercise so that it's separated into distinct modules, and more easily unit testable.
Break for lunch
Memoization is a technique that can be used with pure functions, where output values are “remembered” for an input argument(s). Thus, re-invoking the function with the same arguments will return the same “remembered” result. We’ll implement a
@memoizefunction decorator so that we can apply this technique easily and cleanly in our code.
Using a property descriptor, define a property on an object that's derived from other values. We should be able to get and set this property, just as if it was value based. For the getter and setter you define, you should take care of keeping all dependencies properly in sync.
We'll recap what we've covered today, and set our sights on a homework assignment and tomorrow's agenda
One of the most powerful things we can build on top of generator functions is an “async task runner”. You have an “autocomplete” use case already set up, that involves running several async operations in sequence.