Local variables only exist during function calls#

We learned that local variables that had been created by a function call are forgotten when the function returns. If you call the same function again, the local variables in this call will not remember the values stored in them from the last function call. Let’s think about the following example.

def assign_x(num, first_call):
if first_call == False:
    print('The value of x is at the second call:', x)
x = num

assign_x(8, True) assign_x(9, False)

assign_x function is slightly modified so that it takes another parameter first_call, which is a boolean variable that indicates if it is the first call of assign_x function. Our example calls assign_x function twice. The first call assigns num=8 and f``irst_call=True``. In this call, the local variable x is set as x=8. The second call of assign_x function now assigns num=9 and first_call=False. Since the condition of if statement is satisfied for this second call, the print function will be called. But now have an error:

UnboundLocalError: local variable 'x' referenced before assignment

This is because even though the local variable x had been assigned as x=8 in the previous function call, the value of x assigned in the previous call is already forgotten when that call was returned! Note that x created in the second function call is a newly created variable although it is in the same local scope of assign_x function with the same name as the previous local variable x.