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

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

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

pythonnum = 1

def func():
  print(num)

func() # выведет 1

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

pythonnum = 1

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

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

pythonnum = 1

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

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

pythonnum = num + 2

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

Задание 1

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

pythontst = '12'

def func():
  tst = 12
  return tst
  
print(tst)
Задание 2

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

pythontst = 'abc'

def func():
  tst = tst.upper()
  return tst

func()
print(tst)
Задание 3

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

pythontst = 'abc'

def func():
txt = tst.upper()
return txt
    
print(func())
print(tst)