# Нюансы работы с областями видимости в Python

Рассмотрим важные нюансы работы с локальной и глобальной переменными.

Пусть у нас есть глобальная переменная `num`. Давайте создадим функцию `func`, которая будет выводить глобальную `num` в консоль:

`num = 1 def func(): print(num) func() # выведет 1`

А теперь объявим локальную `num` на строке ниже функции `print`. После выполнения кода в консоль выведется ошибка. Это происходит из-за того, что Python внутри функции воспринимает `num` только как локальную переменную, которая еще не была объявлена:

`num = 1 def func(): print(num) # выведет ошибку num = 2`

Давайте теперь перепишем код внутри функции так, чтобы значение переменной `num` увеличилось на `2`:

`num = 1 def func(): num += 2 # выведет ошибку`

Ошибка вызвана тем, что выражение `num += 2` представляет собой следующую запись:

`num = num + 2`

Однако сама локальная переменная, к которой происходит прибавление еще не объявлена. И соответственно Python выводит ошибку, поскольку нельзя прибавить число к несуществующему значению.

Каким будет результат выполнения следующего кода:

`tst = '12' def func(): tst = 12 return tst print(tst)`

Каким будет результат выполнения следующего кода:

`tst = 'abc' def func(): tst = tst.upper() return tst func() print(tst)`

Каким будет результат выполнения следующего кода:

`tst = 'abc' def func(): txt = tst.upper() return txt print(func()) print(tst)`
← →
↑