The former is an error ("UnboundLocalError: local variable 'foo' referenced before assignment"), the latter is a workaround by manually boxing the variable in a list. I'm not sure why that works, but it's rather ugly.
The same, in Lua:
function acc(x)
local foo = x
return function()
foo = foo + 1
return foo
end
end
Oh, yes. You are mutating variables. You shouldn't do that anyway in a functional setting.
Python's syntax forces the language to guess whether you want to make a new variable or use the variable of the same name from the outer scope. The heuristic they have, says that if you assign something to the variable, you get a new one by default. You can declare
global x
before to assign to the variable in the outerscope.
What do you mean?