How to understand global and local scopes in Python?

Question:

I am a novice in Python and wondering the situation below.

x = 1
def func():
    print(x)
    x = 2
    return x

So I got the UnboundLocalError: local variable ‘x’ referenced before assignment.
But if I right understand – Python read and execute code row by row.
So in first statement inside function "print(x)" it must just relay global variable x which eq. 1, but instead I got the error.
Please explain, I think it simple.

Asked By: Ruslan Mansurov

||

Answers:

I think your problem was explained as well in the FAQ of python docs

This is because when you make an assignment to a variable in a scope,
that variable becomes local to that scope and shadows any similarly
named variable in the outer scope. Since the last statement in foo
assigns a new value to x, the compiler recognizes it as a local
variable. Consequently when the earlier print(x) attempts to print the
uninitialized local variable and an error results.

Answered By: Nguyen Chi Cuong