Зарезервированное слово «global» и «nonlocal»

IamDenis

Новичок
Пользователь
Дек 12, 2021
4
0
1
Всем привет! Учусь потихоньку языку программированию python по книге “A Byte of Python” и дочитал уже до пункта, указанного в заголовке темы, вот у меня вопрос:
Насколько я понял, в пункте про “Зарезервированное слово «global»” говорят о том, что можно переменную объявленную в функции, объявить глобальной, как я понял в таком случае, значение её переменной будет доступно в любых других функциях? Тогда чем она отличается от переменных объявленных во внешнем блоке? Почему просто не вынести эту переменную во внешний блок и все?
И если кто может объясните про nonlocal тоже, спасибо большое!
 

Vershitel_sudeb

Vershitel sudeb
Команда форума
Модератор
Мар 17, 2021
974
220
43
21
Москва
Если вынести переменную во внешний блок, а потом в функции попробовать её поменять, переменная созданная ранее не изменится, а в функции создастся переменная с таким же именем, чтобы этого избежать используется global
Python:
bar = 10

def func():
    bar = 20
    print(bar)  # 20

func()

print(bar)  # 10
Python:
bar = 10

def func():
    global bar
    bar = 20
    print(bar)  # 20

func()

print(bar)  # 20

nonlocal работает похожим образом, но при указании nonlocal мы говорим чтобы программа обращалась не к глобальной переменной, а к переменной в более высокой области видимости

Python:
bar = 10

def func():
    bar = 20
    def f():
        nonlocal bar
        # Более высокой областью видимости является функция func, будет меняться переменная в ней
        bar = 30
    f()
    print(bar) # 30

func()

print(bar) # 10
 
Последнее редактирование:
  • Мне нравится
Реакции: Student и IamDenis

IamDenis

Новичок
Пользователь
Дек 12, 2021
4
0
1
От души спасибо за объяснение!
 

Форум IT Специалистов