почему глобальные переменные в функции python работают по-разному в разных сценариях? - PullRequest
0 голосов
/ 11 декабря 2019
myGlobal = 5
z=2
def func1(a):
    a=1
def func2(a):
    a=1
    myGlobal=z+1   # here it doesnt throw any error
    print (myGlobal)
func1(z)
func2(z)

myGlobal = 5
z=2
def func1(a):
    a=1


def func2(a):
    a=1
    z=z+1   # here it throws any error stating local variable is not defined
    print (myGlobal)

func1(z)
func2(z)

1 Ответ

0 голосов
/ 11 декабря 2019

потому что вы пытаетесь переназначить то же имя переменной, чтобы python теперь рассматривал z как локальную область видимости, поскольку она была изменена внутри функции без объявления ее глобальной. Вы можете использовать dis, чтобы увидеть, что здесь происходит под капотом. В func1 вы можете видеть, что z загружается из global, но во втором функционале из-за синтаксиса он думает, что вы ссылаетесь на локальное значение z, поэтому оно загружается из локальной области видимости, где z не существует.


myGlobal = 5
z=2
def func1(a):
    a=z+1


def func2(a):
    z=z+1   # here it throws any error stating local variable is not defined

from dis import dis
print(dis(func1))
print("###")
print(dis(func2))

ВЫХОД

  5           0 LOAD_GLOBAL              0 (z)
              2 LOAD_CONST               1 (1)
              4 BINARY_ADD
              6 STORE_FAST               0 (a)
              8 LOAD_CONST               0 (None)
             10 RETURN_VALUE
None
###
  9           0 LOAD_FAST                1 (z)
              2 LOAD_CONST               1 (1)
              4 BINARY_ADD
              6 STORE_FAST               1 (z)
              8 LOAD_CONST               0 (None)
             10 RETURN_VALUE
None
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...