Explanation of this Python language feature? [x for x in x for x in x] (to flatten a nested list)

Mark H Harris harrismh777 at gmail.com
Tue Mar 25 03:39:33 CET 2014

On 3/24/14 8:20 PM, Terry Reedy wrote:
> On 3/24/2014 7:56 PM, Mark H Harris wrote:

>> the list which is used for each of the adder[] functions created.
> Wrong. Functions look up global and nonlocal names, such as n, when the
> function is called.

hi Terry, yeah, I know; this is what's *wrong* all at once.

Functions "look up global and nonlocal names" such as n, is semantics 
for "each created function 'grabs' the last number (n) in the list", 
well, because that (n) is bound at call-time to (3).

Your version semantically is detailed and correct; my version 
semantically is "how it is perceived" by the user, which is also 
correct. Again, how the function gets the n (grab or lookup) is mute. 
The user is often confused about how this happens. As you have shown, 
even experts in this field disagree about how this is described, which 
is also my secondary point--- the whole thing is VERY difficult to 
explain to "normal" users. It often takes several sessions and goes on 
and on, until Mark Lawrence calls it tedious.


More information about the Python-list mailing list