python - Why does printing a variable in global scope work, but modifying it does not? -


x = 1 def fn():     print x fn() 

this prints "1":

x = 1 def fn():     x += 1     print x fn() 

this raises "unboundlocalerror: local variable 'x' referenced before assignment"

what going on here?

in python, assigning variable implicit local declaration, resolved during bytecode compilation. so

x += 1 

will create local variable x , compile byte code:

0 load_fast                0 (x) 3 load_const               1 (1) 6 inplace_add 7 store_fast               0 (x) 

the command load_fast try load local variable x not yet defined, that's why fails.

however, if define x global explicitly, use load_global/store_global instead.

in case of print in first function, compiler assumes since no local variable declared (assigned) ever in function body, should mean global variable.


Comments

Popular posts from this blog

qt - Using float or double for own QML classes -

Create Outlook appointment via C# .Net -

ios - Swift Array Resetting Itself -