Merge pull request #267 from simon-weber/binding-clarification

Clarify "late binding" in gotchas
This commit is contained in:
Kenneth Reitz
2013-04-04 11:08:54 -07:00
+4 -3
View File
@@ -128,11 +128,12 @@ What Does Happen
Five functions are created, but all of them just multiply ``x`` by 4. Five functions are created, but all of them just multiply ``x`` by 4.
Python's closures are *late binding*. This means that names within closures are Python's closures are *late binding*.
looked up at the time the inner function is *called*. This means that the values of variables used in closures are looked
up at the time the inner function is called.
Here, whenever *any* of the returned functions are called, the value of ``i`` Here, whenever *any* of the returned functions are called, the value of ``i``
is looked up in the surrounding scope at call time, when by then the loop has is looked up in the surrounding scope at call time. By then, the loop has
completed and ``i`` is left with its final value of 4. completed and ``i`` is left with its final value of 4.
What's particularly nasty about this gotcha is the seemingly prevalent What's particularly nasty about this gotcha is the seemingly prevalent