12 September 2010
Quiz Question
Say you have the following module code:
a = 1
class some_class:
a = a
def some_function():
a = a
some_class()
some_function()
What is going to happen? Well, think about it, the solution is in the next paragraph.
Solution
The correct answer is that the call “some_function()” is going to give you a “UnboundLocalError” exception.
This is because it in functions unlike in classes (or modules) do look ahead for assigned to variable names. Python allocates a slot for local variables of functions and that is a property that doesn’t change - unless you say “global” of course. This slot is used for every access to the variable name, which forbids you to make it local.
Surprised? I was too! I only learned it while doing my Python compiler Nuitka and I made it a separate posting, because it really surprised me how different function body and class body work.