{ "q1": { "type": "blank", "question": "\n

In the functional programming paradigm, functions should be ____, meaning\nfunctions only rely on their given inputs to produce an output. \n\nSuch functions should avoid modifying ____ or mutable data, thus limiting\nthe amount of observable ____.\n

\n\n

To enable the functional programming paradigm, functions in Python are\n____ citizens. This means you can assign functions to variables and pass\nthem as arguments to other functions, which allows for function ____.

\n\n

Two common higher-order functions in Python are:

\n\n\n\n

To create anonymous functions that we can pass to the higher-order\nfunctions above, we can use ____ expressions.

\n\n

Because the two higher-order functions above return iterables rather\nthan lists, we can re-write them using ____, which are a more Pythonic\nway of making lists.

\n\n

Rather than materializing or populating a whole list, we can produce\nitems one-by-one using a ____ function that contains the\nyield keyword.

\n" } }