Ключевое слово global в Python

Глобальные переменные и global в Python

Global в Python — это ключевое слово, которое используется в теле функции для определения глобальной переменной и выполнения изменений на ней.

Понимание локальных и глобальных переменных

Локальные переменные

В Python, переменные, объявленные внутри функции, известны как локальные переменные. Эти переменные действительны только в пределах функции, где они объявлены. Если мы попытаемся получить доступ к локальной переменной за пределами функции, мы столкнемся с ошибкой.

def func():
    local_var = "Я локальная переменная"
    print(local_var)

func()
print(local_var)  # Здесь мы получим ошибку NameError: name 'local_var' is not defined

Глобальные переменные

С другой стороны, глобальные переменные — это переменные, объявленные вне функции. Эти переменные могут быть доступны в любом месте в вашем коде.

global_var = "Я глобальная переменная"

def func():
    print(global_var)

func()
print(global_var)

Использование global

Ключевое слово global позволяет нам работать с глобальными переменными внутри функции.

Давайте рассмотрим пример:

global_var = "Я глобальная переменная"

def func():
    global_var = "Я изменилась внутри функции"
    print(global_var)

func()
print(global_var)

#Я изменилась внутри функции
#Я глобальная переменная

Вы заметите, что, несмотря на то что мы изменили global_var внутри функции, это не повлияло на глобальную переменную за пределами функции. Это происходит потому, что, когда мы меняем переменную внутри функции, Python создает новую локальную переменную с тем же именем. Чтобы изменить глобальную переменную внутри функции, нам нужно использовать ключевое слово global.

global_var = "Я глобальная переменная"

def func():
    global global_var
    global_var = "Я изменилась внутри функции"
    print(global_var)

func()
print(global_var)

#Я изменилась внутри функции
#Я изменилась внутри функции

Объявление глобальных переменных в функции

Мы можем объявить глобальную переменную внутри функции с помощью ключевого слова global. Если глобальная переменная еще не была определена вне функции, Python создаст ее в глобальной области видимости.

def func():
    global new_global_var
    new_global_var = "Я глобальная переменная, объявленная внутри функции"
    print(new_global_var)

func()
print(new_global_var)  # Здесь мы не получим ошибку

#Я глобальная переменная, объявленная внутри функции
#Я глобальная переменная, объявленная внутри функции

Вложенные функции и global

Если у вас есть вложенные функции, то global в внутренней функции будет относиться к глобальному пространству имен, а не к пространству имен внешней функции. Давайте рассмотрим пример:

def outer_func():
    var = "Я переменная внешней функции"
    
    def inner_func():
        global var
        var = "Я переменная внутренней функции"
    
    inner_func()
    print(var)

outer_func()
print(var)

#Я переменная внешней функции
#Я переменная внутренней функции

Вы увидите, что значение var в outer_func не изменилось после вызова inner_func. Это происходит потому что global var в inner_func объявляет var как глобальную переменную, а не переменную outer_func.

global против nonlocal

В Python есть еще одно ключевое слово, nonlocal, которое используется для работы с переменными в ближайшей внешней области видимости (но не в глобальной области видимости). Оно позволяет изменять переменные во внешних функциях. Если вы попытаетесь использовать nonlocal с глобальной переменной, вы получите ошибку.

def outer_func():
    var = "Я переменная внешней функции"
    
    def inner_func():
        nonlocal var
        var = "Я переменная внутренней функции"
    
    inner_func()
    print(var)

outer_func()  # Здесь var в outer_func изменилась после вызова inner_func

#Я переменная внутренней функции

Примеры использования global

Пример 1: Использование global

counter = 0

def update_counter():
    global counter
    counter += 1  # увеличиваем глобальный счетчик на 1

update_counter()
update_counter()
print(counter)  # выведет 2, потому что мы вызвали функцию update_counter() дважды

#2

Пример 2: Изменение глобальной переменной безglobal

counter = 0

def update_counter():
    counter = "Я локальная переменная"

update_counter()
print(counter)  # все равно выведет 0, потому что функция обновила локальную переменную, а не глобальную

#0

Пример 3: Использование global для создания глобальной переменной внутри функции

def create_global_variable():
    global new_var
    new_var = "Я новая глобальная переменная"

create_global_variable()
print(new_var)  

#Я новая глобальная переменная

Нюансы использования global

В то время как global может быть полезным инструментом, есть некоторые нюансы, которые нужно учесть при его использовании. Первое, что стоит отметить, это то, что использование глобальных переменных может делать программу более сложной для понимания и отладки, так как они могут быть изменены в любом месте в коде.

Второе — возможность переопределения глобальных переменных, что может привести к неожиданным результатам. Если глобальная переменная и локальная переменная имеют одно и то же имя, и вы используете ключевое слово global внутри функции, вы измените глобальную переменную, а не локальную.

В общем, в Python идеально избегать использование глобальных переменных, если это возможно, и рассмотреть другие варианты, такие как использование аргументов функции или классов.

Заключение

В этом руководстве мы рассмотрели, как использовать ключевое слово global в Python. Это ключевое слово позволяет нам работать с глобальными переменными внутри функций, что может быть полезно в некоторых случаях. Однако использование global следует делать осторожно, так как это может сделать код более сложным для понимания и отладки.

Содержание: