A lambda is no different in scoping rules than a regular function def. If you put a def in a loop, you'll find the same behavior.
Closures are only created for functions defined inside other functions. Thus the term non-local. They're variables that are neither local nor global.
Don't call it broken when it works as intended.