Нюанси на работа с обхвати на видимост в 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)