Подтвердить что ты не робот

Правильное использование глобальных переменных в Python 3

Какое правильное использование глобальных переменных в Python 3?:

1) Указав global VAR_NAME один раз в ядре script (не внутри функции), а затем просто ссылаясь на переменную как VAR_NAME всюду

2) Оповещать global VAR_NAME один раз внутри каждой функции, которая использует глобальную переменную, а затем просто ссылается на переменную как VAR_NAME для остальной части функции и внутри самого ядра script

4b9b3361

Ответ 1

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

Второй пример - правильное использование.

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

Ответ 2

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

Вот несколько примеров:

global_var = 1

def example1():
    # global keyword is not needed, local_var will be set to 1.
    local_var = global_var

def example2():
    # global keyword is needed, if you want to set global_var,
    # otherwise you will create a local variable.
    global_var = 2

def example3():
    # Without using the global keyword, this is an error.
    # It an attempt to reference a local variable that has not been declared.
    global_var += 1

Ответ 3

"таким образом, который иначе интерпретируется как присвоение локальной переменной" --- да, но вот тонкая деталь:

------------------- ошибка: локальная переменная 'c', на которую ссылаются перед назначением

def work():
  c += 3

c = 0

work()
print(c)

------------------- ошибка: локальная переменная 'c', на которую ссылаются перед назначением

c = 0

def work():
  c += 3

work()
print(c)

------------------- печатает [3]

def work():
  c.append(3)

c = []

work()
print(c)

------------------- печатает [3]

c = []

def work():
  c.append(3)

work()
print(c)

Ответ 4

Основное различие между первыми двумя случаями и следующими двумя случаями в приведенном выше ответе должно заключаться в том, что список изменчив. Для случаев, таких как a = 1, указатель указывает на то место, где находится 1, а когда вы говорите, что a = 2, указатель смещается.

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

Теперь большой вопрос в том, как функция знает, что переменная, которую мы модифицируем, является глобальной или локальной, потому что кажется, что мы можем изменить глобальную переменную, если она изменяемая, и не можем, если она не изменяемая (функция также не распознает эту переменную). в качестве глобальной переменной)