Nyanser av arbete med scopingsområden i Python
Låt oss överväga viktiga nyanser av arbete med lokala och globala variabler.
Antag att vi har en global variabel num.
Låt oss skapa en funktion func
som kommer att skriva ut den globala num
till konsolen:
num = 1
def func():
print(num)
func() # skriver ut 1
Och nu deklarerar vi en lokal num på
raden under funktionen print. Efter
att koden har körts kommer ett fel att skrivas ut i konsolen.
Detta händer på grund av att Python
inuti funktionen uppfattar num
endast som en lokal variabel som
ännu inte har deklarerats:
num = 1
def func():
print(num) # ger ett fel
num = 2
Låt oss nu skriva om koden inuti funktionen
så att värdet på variabeln num
ökar med 2:
num = 1
def func():
num += 2 # ger ett fel
Felet orsakas av att uttrycket num += 2
representerar följande notation:
num = num + 2
Men den lokala variabeln som tillägget sker till är ännu inte deklarerad. Och följaktligen ger Python ett fel, eftersom det inte går att lägga till ett nummer till ett icke-existerande värde.
Vad blir resultatet av att köra följande kod:
tst = '12'
def func():
tst = 12
return tst
print(tst)
Vad blir resultatet av att köra följande kod:
tst = 'abc'
def func():
tst = tst.upper()
return tst
func()
print(tst)
Vad blir resultatet av att köra följande kod:
tst = 'abc'
def func():
txt = tst.upper()
return txt
print(func())
print(tst)