Based on this version in Clojure
Lexical Scope in Python
Lexical scope guarantees that the reference to a value will be "enclosed" in the scope in which it is being used.
Lexical scoping simplifies our life because it allows us to mechanically follow code and determine where a value originated.
- Start at the place of reference of the value
- Then "walk" backwards and outwards to find where the value was defined
- Now you know where the value came from