Retaining enclosing scopes’ state with defaults
In earlier versions of Python, the sort of code in the prior section failed because nested
defs did not do anything about scopes—a reference to a variable within f2 would search
only the local (f2), then global (the code outside f1), and then built-in scopes. Because
it skipped the scopes of enclosing functions, an error would result. To work around
this, programmers typically used default argument values to pass in and remember the
objects in an enclosing scope: